롱 폴링 (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개처럼 동작하는 경우가 있다고 한다. 사용 시에 고려해야 할 부분.