【ぽーりんぐ】

ポーリング とは?

最終更新:
💡 変わったかどうかを、繰り返し確認

相手や状態を繰り返し確認し、変化があるかを調べる方式。短いポーリングとロングポーリング、確認間隔と負荷、WebSocket・SSEとの違いを解説します。

📌 このページのポイント
ポーリング:変わったか繰り返し確認クライアントサーバー1回目の確認変化なし間隔を空けて、もう一度2回目の確認新しいデータあり下に進むほど、あとになる頻繁な確認:気付きやすいが回数も増える長い間隔:回数は減るが、気付くまで待つ
縦線は時間、右向きは要求、左向きは応答です。短いポーリングの例で、ロングポーリングはデータかタイムアウトまで応答を待ってから再要求します。
ひよこ ひよこ
新しいデータを、どうやって見つける?
ペンギン先生 ペンギン先生
ポーリングでは、クライアント側から繰り返し問い合わせるよ。たとえば処理が完了したかサーバーに確認し、まだなら後でもう一度聞く。変化がなくても、確認の要求と応答が発生するんだ。
ひよこ ひよこ
短い間隔で聞けば、よい?
ペンギン先生 ペンギン先生
変化に早く気付きやすくなる一方、通信やサーバーの処理が増えるよ。長い間隔なら確認回数を減らせるけれど、次の確認まで気付かない時間がある。必要な速さと負荷、APIの利用条件を考えて決めるんだ。
ひよこ ひよこ
タイマーで呼べば、簡単?
ペンギン先生 ペンギン先生
前の確認が終わらないうちに次を始めると、要求が重なったり、結果の順番がずれたりするよ。前の処理が終わってから次を予定する方法もある。失敗時の待ち時間、タイムアウト、確認をやめる条件も設計しよう。
ひよこ ひよこ
ロングポーリングは、何が長い?
ペンギン先生 ペンギン先生
サーバーが新しいデータやタイムアウトまで応答を待つ方式だよ。応答を受け取ると、クライアントがまた要求する。何もないとすぐ返す短いポーリングより空の確認を減らせる場合があるけれど、接続や待つ処理の管理は必要なんだ。
ひよこ ひよこ
WebSocketのほうが、いつでもよい?
ペンギン先生 ペンギン先生
WebSocketは接続上で双方向にメッセージを送り合える。SSEはサーバーからWebページへの通知に使えるよ。ポーリングも、確認が少なくてよい処理などに使える。必要な方向や頻度、利用環境、接続の管理で選ぼう。
もっと詳しく知りたい人へ

setIntervalなら、必ず正確な間隔で確認できる?

実際の実行は処理やブラウザの状態等で遅れることがあります。MDNは通信等の処理が間隔より長い場合、再帰的なsetTimeoutで前の処理の完了後に次を予定する方法を説明しています。タイマーの設定値だけで応答の速さを保証しないようにします。

ロングポーリングでは、最初の要求を永久に待つ?

新しいデータ、タイムアウト、接続エラーなどで要求は終わります。クライアントが必要に応じて再接続します。長く待てる上限はサーバーや中継機器の設定にも関係し、エラー時の再試行と終了条件を決めます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ポーリング」って出てきたら「変化があったかを、繰り返し問い合わせて確認する方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Polling」 = 繰り返し問い合わせて調べること
💬 Webでは、クライアントがサーバーに新しいデータの有無を繰り返し確認する例があります。機器や処理の状態確認にも使われる言葉です。

参考資料

← 用語集にもどる