普通のポーリングと何が違うの?
通常のポーリングは「1秒ごとにサーバーに聞きに行く」。新しいデータがなくても毎回リクエスト→空レスポンス。帯域の無駄。ロングポーリングはリクエストを送ったら、サーバーがデータがあるまで(またはタイムアウトまで)レスポンスを保留する。データが来た瞬間にレスポンスして、クライアントは即座に次のリクエストを送るんだよ
WebSocketと比べてどう?
ロングポーリングは新しいデータごとにHTTPリクエスト/レスポンスのサイクルが発生する。ヘッダーのオーバーヘッドがある。WebSocketは一度コネクションを張れば軽量なフレームでやり取りできる。ロングポーリングは互換性が高いけど効率は劣る。今はWebSocketかSSEを使うのが普通だよ
おもしろい!まだ使われてる?
一部で現役だよ。CometD(古いリアルタイムフレームワーク)、一部のチャットシステム、WebSocket非対応のプロキシ環境でのフォールバック。Socket.IOはWebSocket接続に失敗した場合にロングポーリングにフォールバックする機能を持っている。レガシー環境への互換性として覚えておく価値はあるよ
実装の注意点は?
①タイムアウトの設定(30〜60秒が一般的。プロキシやロードバランサーのタイムアウトより短く)、②サーバーの同時接続数管理(各クライアントが1接続を保持するのでスレッド/コネクション枯渇に注意)、③再接続ロジック(ネットワーク断やタイムアウト後に即座に再接続)。Node.jsやGoのような非同期I/Oに向いたランタイムが適しているよ