Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

ロングポーリング(ロングポーリング)とは | 意味や読み方など丁寧でわかりやすい用語解説

ロングポーリング(ロングポーリング)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ロングポーリング (ロングポーリング)

英語表記

long-polling (ロングポーリング)

用語解説

ロングポーリングは、クライアントとサーバー間のリアルタイムに近い通信を実現するための一つの技術である。従来のポーリングがクライアントからの定期的かつ頻繁な問い合わせを必要とし、サーバーリソースの無駄や情報の遅延を招いていたのに対し、ロングポーリングではクライアントが一度リクエストを送信した後、サーバーは新しいデータが発生するまでその応答を保留する。これにより、データの発生をより効率的かつ迅速にクライアントに通知することが可能となる。

従来のポーリング方式では、クライアントは新しい情報があるかどうかを一定間隔でサーバーに繰り返し問い合わせる。例えば、1秒ごとに「何か新しいメッセージがありますか」とサーバーにリクエストを送り続ける。この方式の問題点はいくつかある。第一に、ほとんどのリクエストが「新しい情報なし」という空の応答を返すため、サーバーは頻繁に無意味な処理を行い、リソースを無駄に消費する。第二に、ネットワーク上を多くのリクエストと空の応答が流れ、帯域を不必要に圧迫する。これらのリクエストと応答にはHTTPヘッダなどの付帯情報が含まれるため、たとえデータが空であっても通信量が発生する。第三に、情報のリアルタイム性がポーリング間隔に依存するため、重要なイベントが発生しても次のポーリングまでクライアントに通知されない遅延が発生する。例えば、ポーリング間隔が5秒であれば、イベント発生から最大5秒の遅延が生じる可能性がある。

ロングポーリングはこれらの課題を克服するために考案された。その仕組みは以下の通りである。まず、クライアントはサーバーに対してHTTPリクエストを送信する。これは通常のデータ取得リクエストと形式的には同じである。しかし、サーバー側では新しいデータやイベントがまだ発生していない場合、すぐに応答を返さずに、そのHTTP接続をオープンな状態で保持し続ける。サーバーは、新しいデータが利用可能になるまで待機する。

サーバー側で新しいデータ(例えば、新しいチャットメッセージやシステム通知など)が発生した際には、サーバーは保留していたその接続に対して、発生したデータを応答として即座に返す。クライアントは応答を受信すると、そのデータを利用し、そしてすぐに次のロングポーリングリクエストをサーバーに送信する。この「応答を受け取ったらすぐに次のリクエストを送る」という動作が重要であり、データがない場合に接続がタイムアウトした場合も同様に次のリクエストを送信する。

もし新しいデータが一定時間内に発生しなかった場合、サーバーは設定されたタイムアウト時間になると、データを伴わない「データなし」という空の応答をクライアントに返す。クライアントはこの空の応答を受け取ると、これも同様に次のロングポーリングリクエストをサーバーに送信する。このサイクルを繰り返すことで、データが発生した際に迅速にクライアントに通知され、従来のポーリングのように空の問い合わせがネットワークを頻繁に往来するのを防ぐことができる。

ロングポーリングの大きな利点は、従来のポーリングに比べて、サーバーのリソース消費とネットワーク帯域の使用量を大幅に削減できる点にある。データの発生時にのみ応答が返されるため、不要な通信が減る。また、HTTPプロトコルを基盤としているため、既存のWebインフラストラクチャ、例えばプロキシサーバーやロードバランサー、ファイアウォールなどとの互換性が高く、特別な設定なしに導入しやすい。WebSocketのような専用のプロトコルを用いる場合に比べて、実装も比較的容易である。

一方で、考慮すべき点も存在する。サーバーは多数のクライアントからの接続を長時間オープンな状態で保持する必要があるため、接続数が増大するとサーバー側のメモリやソケットといったリソースを消費し、スケーラビリティに限界が生じる可能性がある。特に、接続を保持する間はサーバーのワーカープロセスやスレッドがその接続のためにブロックされる設計の場合、処理可能な接続数が制限されることがある。また、タイムアウト後の再接続や、接続が切断された場合の再確立など、接続管理のオーバーヘッドは存在する。厳密な意味でのリアルタイム性、すなわちミリ秒単位の応答性が求められるような用途には、WebSocketのような永続的な双方向通信プロトコルの方が適している場合もある。しかし、多くのWebアプリケーションにおいて、リアルタイムに近いユーザー体験を提供するための効果的かつ手軽な選択肢として、ロングポーリングは広く利用されている。

関連コンテンツ