바로 답하지 않고 기다려
long polling 은 요청 모양은 그대로 두고 응답 시점만 바꿔. 서버는 ‘새 소식 없어’라고 곧바로 답하지 않아. 알려줄 일이 생기거나 정해둔 시간 제한이 끝날 때까지 연결을 붙잡고 있지. 응답을 받은 클라이언트가 곧바로 다음 요청을 열면, 겉으로는 서버가 밀어준 것처럼 보여.
2010년대를 버틴 이유
기업 방화벽과 프록시가 HTTP 말고는 모조리 막던 시절에도 long polling 은 통과했어. Gmail 과 Facebook chat 도 한동안 이 방식을 썼지. WebSocket 이 막히면 Socket.IO 가 내려가는 안전망도 여전히 long polling 이야.
그래도 묘수일 뿐이야
응답할 때마다 연결이 닫히므로 다시 TCP 핸드셰이크를 치러야 해. 프록시가 1~2분 동안 조용한 요청을 끊는다면 서버 시간 제한을 그보다 짧게 잡아야 하고, 기다리는 요청마다 서버 자원도 차지해. 서버가 알려주는 방향은 잘 흉내 내지만 클라이언트가 보낼 때는 별도 요청이 필요하니 양방향도 아니야.