【ろんぐぽーりんぐ】

ロングポーリング とは?

💡 「更新あるまで待って」のHTTP問い合わせ方式
📌 このページのポイント
ロングポーリング ― 通常ポーリングとの比較 通常ポーリング クライアント サーバー リクエスト 変更なし(空レスポンス) 変更なし(空レスポンス) データあり! 無駄な通信が多い ロングポーリング クライアント サーバー リクエスト 待機中... データ発生時に即レスポンス 通信は最小限 通常ポーリング 一定間隔で繰り返しリクエスト 実装はシンプルだが通信量が多い リアルタイム性が低い ロングポーリング データが来るまでサーバーが待機 通信量が少なくリアルタイム性が高い WebSocketの前身的な技術
ロングポーリングのイメージ
ひよこ ひよこ

普通のポーリングと何が違うの?

ペンギン先生 ペンギン先生

通常のポーリングは「1秒ごとにサーバーに聞きに行く」。新しいデータがなくても毎回リクエスト→空レスポンス。帯域の無駄。ロングポーリングはリクエストを送ったら、サーバーがデータがあるまで(またはタイムアウトまで)レスポンスを保留する。データが来た瞬間にレスポンスして、クライアントは即座に次のリクエストを送るんだよ

ひよこ ひよこ

WebSocketと比べてどう?

ペンギン先生 ペンギン先生

ロングポーリングは新しいデータごとにHTTPリクエスト/レスポンスのサイクルが発生する。ヘッダーのオーバーヘッドがある。WebSocketは一度コネクションを張れば軽量なフレームでやり取りできる。ロングポーリングは互換性が高いけど効率は劣る。今はWebSocketかSSEを使うのが普通だよ

ひよこ ひよこ

おもしろい!まだ使われてる?

ペンギン先生 ペンギン先生

一部で現役だよ。CometD(古いリアルタイムフレームワーク)、一部のチャットシステム、WebSocket非対応のプロキシ環境でのフォールバック。Socket.IOはWebSocket接続に失敗した場合にロングポーリングにフォールバックする機能を持っている。レガシー環境への互換性として覚えておく価値はあるよ

ひよこ ひよこ

実装の注意点は?

ペンギン先生 ペンギン先生

タイムアウトの設定(30〜60秒が一般的。プロキシロードバランサータイムアウトより短く)、②サーバーの同時接続数管理(各クライアントが1接続を保持するのでスレッド/コネクション枯渇に注意)、③再接続ロジック(ネットワーク断やタイムアウト後に即座に再接続)。Node.jsやGoのような非同期I/Oに向いたランタイムが適しているよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ロングポーリング」って出てきたら「更新があるまでリクエストを保留するリアルタイム通信手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Long Polling」 = 長時間ポーリング
💬 通常のPolling(定期問い合わせ)をLong(長く)保持する方式だよ
← 用語集にもどる