▲GN⁺ 2025-01-09 | parent | ★ favorite | on: 기본으로 돌아가기: 웹소켓 대신 롱폴링을 선택한 이유(inferable.ai)Hacker News 의견 Long polling은 자체적인 문제를 가지고 있음 Second Life는 클라이언트와 서버 간에 HTTPS long polling 채널을 사용함 클라이언트 측에서는 libcurl을 사용하며, 타임아웃이 발생할 수 있음 서버가 타임아웃과 다음 요청 사이에 메시지를 보내려 하면 경합 조건이 발생하여 메시지가 손실될 수 있음 Apache 서버가 앞단에 위치하여 불필요한 요청을 차단하지만, 타임아웃이 발생할 수 있음 중간 박스와 프록시 서버가 long polling을 싫어할 수 있음 HTTP 연결을 오래 유지하는 것을 싫어하는 요소들이 많음 결과적으로 신뢰할 수 없는 메시지 채널이 되어 중복을 감지하기 위해 시퀀스 번호가 필요하고 메시지를 잃을 수 있음 원래 기사에서 "loop"로 표시된 차트 섹션은 타임아웃 처리를 언급하지 않음 long polling을 사용할 경우 몇 초마다 데이터를 보내 연결을 유지해야 함 Phoenix와 LiveView를 매일 사용하는 것이 기쁨 WebSockets를 사용하여 신경 쓸 필요가 없음 서버 전송 이벤트(SSE)를 사용하는 것보다 기술적인 이점이 있는지 궁금함 둘 다 HTTP 연결을 열어두고 간단한 HTTP라는 장점이 있음 SSE는 업데이트나 결과를 스트리밍할 수 있는 경우에 더 적합해 보임 적합한 사용 사례는 특정 클라이언트를 대신하여 모든 작업 ID를 모니터링하는 경우일 수 있음 이 기사는 "Websocket"과 "Long-polling"을 독립적인 결정으로 연결하고 있음 long-polling 서버는 약간의 추가 작업으로 websocket 클라이언트를 처리할 수 있음 기존 아키텍처가 websocket인 경우 long-polling 클라이언트를 지원하려면 두 개의 서버 계층이 필요함 Node.js에서 setTimeout을 사용하는 더 쉬운 방법 import { setTimeout } from "node:timers/promises"; await setTimeout(500); 사용 long polling을 좋아함, 이해하기 쉽고 클라이언트 관점에서 매우 느린 연결처럼 작동함 재시도와 클라이언트 측 취소된 연결을 추적해야 함 코드 예제에서 반복적으로 데이터를 쿼리하는 루프가 어색해 보임 서버 전송 이벤트나 WebSockets가 long polling의 모든 사용 사례를 대체하지 못함 SSE의 연결 제한이 자주 문제로 등장함 WebSockets는 대부분의 환경에서 신뢰할 수 없음 백엔드에서 변경 사항을 감지하고 적절한 클라이언트로 전파하는 문제는 여전히 해결되지 않음 Postgres의 비동기 알림 기능을 사용하는 것이 좋음 서버가 채널을 LISTEN하고 데이터 변경 시 PG가 TRIGGER 및 NOTIFY할 수 있음 짧은 타임아웃과 우아하게 종료된 요청을 가진 long polling의 의미가 여전히 있는지 모르겠음 HTTP/2나 QUIC이 사용되지 않는 경우 이 트릭이 여전히 의미가 있을 수 있음 WebSockets의 상대적으로 간단한 대안을 상기시키는 것이 상쾌함 WebSockets를 선택한 스타트업에서 일했었고, 호텔과 레스토랑 와이파이에서 테스트가 어려웠음 ▲luminance 2025-01-10 [-]Elixir, Phoenix framework, LiveView를 통해서 WebSockets를 써보고 싶네요. 답변달기
Hacker News 의견
Long polling은 자체적인 문제를 가지고 있음
Phoenix와 LiveView를 매일 사용하는 것이 기쁨
서버 전송 이벤트(SSE)를 사용하는 것보다 기술적인 이점이 있는지 궁금함
이 기사는 "Websocket"과 "Long-polling"을 독립적인 결정으로 연결하고 있음
Node.js에서 setTimeout을 사용하는 더 쉬운 방법
import { setTimeout } from "node:timers/promises"; await setTimeout(500);사용long polling을 좋아함, 이해하기 쉽고 클라이언트 관점에서 매우 느린 연결처럼 작동함
서버 전송 이벤트나 WebSockets가 long polling의 모든 사용 사례를 대체하지 못함
Postgres의 비동기 알림 기능을 사용하는 것이 좋음
짧은 타임아웃과 우아하게 종료된 요청을 가진 long polling의 의미가 여전히 있는지 모르겠음
WebSockets의 상대적으로 간단한 대안을 상기시키는 것이 상쾌함