Webアプリケーションは、もともとクライアント-サーバーモデルに基づいて設計されており、クライアント側が常に発信者となってサーバーにデータをリクエストします。そのため、サーバーがクライアントからのリクエストなしにデータを送信する仕組みはこれまでありませんでした。
例えば作成したジョブの状態が完了した事をクライアントに通知したい、ChatGPTのように重い計算をサーバー側で処理している中処理できた内容を逐次送信するなどのユースケースが考えられます。この問題に関する解決策をいくつか紹介します。
HTTPポーリング
HTTPポーリングは、クライアントが一定の間隔でサーバーにリクエストを送り、最新のデータがあるかを確認する仕組みです。ポーリングには「ショートポーリング」と「 ロングポーリング」があり、ショートポーリングではクライアントが定期的にサーバーにリクエストを送り、即座にレスポンスを受け取ります。一方、 ロングポーリングでは、クライアントがリクエストを送信した後、サーバーがデータを返すまでコネクションを開いたままにしておきます。
ショートポーリングのメリットは、実装が容易であり、広く対応している点ですが、頻繁にリクエストを送ることでサーバーの負荷が増えます。