💡Aha!

롱 폴링 (Long polling)

롱 폴링은 WebSocket 또는 Server Sent Events 같은 특정 프로토콜을 사용하지 않아도 지속되는 연결을 만들 수 있는 가장 간단한 방법이다.

일반 폴링 (Regular polling)이랑 다른 점은?

사실 서버에서 주기적으로 새 정보를 얻는 가장 간단한 방법은 주기적으로 요청을 보내는 것이다. 그리고 우리는 그것을 “폴링 (Polling)”이라고 부른다.

이러한 폴링은 보통 클라이언트가 서버로 스스로가 온라인임을 알리고, 그에 대한 응답 (Response)를 받아오는 것이다.

이 방법은 제일 간단하지만 다음과 같은 단점이 있다.

  • 메세지를 받는 시간이 오래 걸린다.
  • 사용자가 다른 작업을 하고 있거나 서비스를 이용하지 않아도 서버에는 지정된 시간마다 요청 폭격을 받는다. 이는 서버가 상당한 양의 부하를 처리해야 됨을 의미한다.

따라서 매우 작은 데이터나 서비스에는 좋을 수 있지만, 일반적으로는 개선이 필요하다.

그래서 롱 폴링.

그래서 롱 폴링 (혹은 “긴 폴링", Long polling) 은 서버를 폴링하는 훨씬 더 나은 방법이 될 수 있다. 또한 구현이 매우 간단하고 지연 없이 message를 전할 수 있다.

흐름 (작동 구조)

1. 클라이언트 요청이 서버로 전송됨. 2. 서버는 보낼 message가 있을 때까지 연결을 닫지 않음. (응답을 하지 않음) 3. message가 생길 경우 서버가 요청에 응답함. 4. 클라이언트는 즉시 새 요청을 만듬.

글 작성자가 업로드 한 이미지

부가적으로

롱 폴링은 message가 적은 상황에서 효과적이다. (Ex. 1:1 채팅)

message가 자주 오면 Browser와 Server 사이의 요청-응답이 매우 많아지므로 처리 성능에 문제가 발생할 수 있다. 따라서 요청이 매우 많은 경우에는 WebSocket 혹은 Server Sent Events가 더 적절하다.

여담

  • Apple 스페셜리스트 고객 상담이 롱 폴링으로 구현됐더라. 근래에는 WebSocket에 밀려 채팅에선 보기 힘들어진 기술이라 신기해서 찾아봤다.
  • 일부 CGI 웹 앱들의 경우에는 요청 1개 - 프로세스 1개처럼 동작하는 경우가 있다고 한다. 사용 시에 고려해야 할 부분.

ref

Long polling
Long polling is the simplest way of having persistent connection with server, that doesn't use any specific protocol like WebSocket or Server Side Events. Being very easy to implement, it's also good enough in a lot of cases. The simplest way to get new information from the server is periodic polling.
Long polling
https://javascript.info/long-polling
Long polling
2024 Dohyun Jung.
Made with ☕️.