【ろんぐぽーりんぐ】

ロングポーリング とは?

最終更新:
💡 更新かタイムアウトまで、HTTPの返事を待つ

HTTPリクエストへの応答を、更新やタイムアウトまで待たせる通信方法。応答後の再問い合わせ、TCP接続との違い、実装上の注意を解説します。

📌 このページのポイント
ロングポーリング:待ってから返すクライアントサーバー1 HTTPリクエスト2 応答を保留更新かタイムアウト3 応答して完了4 次のHTTPリクエスト時間は上から下へ。待つ時間は設定による
要求・保留・応答の完了・再問い合わせを示す例です。一つの応答を終えずに送り続けるストリーミングとは異なります。次のHTTP要求でもTCP接続は再利用でき、必ず新しくつなぎ直す意味ではありません。
ひよこ ひよこ
普通のポーリングと何が違う?
ペンギン先生 ペンギン先生
通常のポーリングは、一定の間隔で更新を問い合わせる。ロングポーリングは、問い合わせを受けたサーバーが、更新やタイムアウトまで返事を待たせるんだ。更新があれば、その応答で知らせるよ。
ひよこ ひよこ
ずっと同じ応答で送るの?
ペンギン先生 ペンギン先生
一回の応答は完了するよ。その後、クライアントが通常は次のリクエストを送る。一つの応答を終えずにデータを送り続けるストリーミングとは、この点が違うんだ。
ひよこ ひよこ
毎回つなぎ直すのは大変そう。
ペンギン先生 ペンギン先生
HTTPのリクエストと応答は繰り返すけれど、毎回新しいTCP接続が必須ではない。持続的な接続を再利用できるよ。HTTPのやり取りと、その下の接続を区別しよう。
ひよこ ひよこ
WebSocketが使えたら、不要?
ペンギン先生 ペンギン先生
用途や通信環境によるよ。Socket.IOの標準設定では、まずHTTPロングポーリングで接続し、可能ならWebSocketなどへ移る仕組みがある。一律に古い方式と決め付けず、必要な通信と環境で比べよう。
ひよこ ひよこ
実装では、どこに注意する?
ペンギン先生 ペンギン先生
応答を待っているリクエストの数や、サーバー・プロキシのタイムアウトを確認する。通信失敗後の再試行や、更新を取りこぼさない仕組みも考えよう。待ち時間や再試行間隔を、どの環境でも同じ固定値にするわけではないんだ。
もっと詳しく知りたい人へ

一回の応答には、一件の更新しか入らない?

複数の更新をまとめて返す設計も可能です。どこまで受け取ったかを確認する識別子などは、アプリ側で決めます。

応答が遅いのは、必ず障害?

更新待ちとして保留する動作と、通信や処理の障害を区別します。正常な待ち時間、タイムアウト時の応答、エラー後の再試行を定義しておきます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ロングポーリング」って出てきたら「更新やタイムアウトまでHTTPの返事を待たせる通信方法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Long Polling」 = 長く待つポーリング
💬 定期的に問い合わせるポーリングに対し、一回の問い合わせを保留する時間を長くする方法です。

参考資料

← 用語集にもどる