プッシュ技術とは
プッシュ技術は、
インターネットにおける通信方式の一つで、
サーバー側からクライアントへデータ送信を開始する方式を指します。クライアントからのリクエストに応じて
サーバーがデータを送るプル技術とは対照的です。プッシュ技術は、特にリアルタイム性が求められる場面や、ウェブサイトの高速化に役立ちます。
プッシュサービスの仕組み
プッシュサービスは、クライアントが事前に登録した情報に基づいて行われることが多く、「出版-購読型モデル」と呼ばれる形式が用いられます。クライアントは
サーバーが提供する様々な情報の「チャンネル」を購読し、チャンネルに新しい情報が入ると、
サーバーがクライアントにプッシュ通知を行います。
ただし、プッシュ技術が利用できない環境では、ポーリング技術を用いて擬似的にプッシュを実現することもあります。
プッシュ技術の利用例
通知
プッシュ技術は、通知機能として広く利用されています。例えば、チャットや
インスタントメッセージでは、メッセージが送信されると即座にユーザーに通知が届きます。
電子メールもプッシュ型システムと言えますが、メール
サーバーからクライアントへの最終的な伝送にはプル型プロトコルが用いられることもあります。しかし、現代のメールクライアントはポーリングを頻繁に行うことで、プッシュのような即時性を実現しています。
ウェブサイトの高速化
従来のウェブサイトでは、HTMLファイルだけでなく、CSSファイルや画像ファイルなど、複数のリソースを読み込む必要がありました。これらのリクエストは、
サーバーとクライアントの間で複数回の往復を必要とするため、ウェブサイトの表示速度を遅くする要因となっていました。しかし、プッシュ技術を用いることで、
サーバーはクライアントのリクエストを待たずに必要なファイルを送信できるため、ラウンドトリップ回数を減らすことができ、ウェブサイトの高速化につながります。ただし、キャッシュが存在する場合は、既に持っているファイルを送信してしまう可能性があり、帯域を無駄に消費してしまうという課題もあります。
その他の利用例
プッシュ技術は、市場データ配信、オンラインチャット、オークション、オンラインゲーム、スポーツ結果配信、コンソール監視、センサーネットワーク監視など、幅広い分野で利用されています。
プッシュ技術の実現方法
HTTP server push
HTTP server pushは、ウェブ
サーバーからブラウザへデータを非同期的に転送する技術です。WebSocket APIを利用して、
サーバーとクライアント間で双方向のTCP接続を確立する方法や、
サーバーがレスポンスデータを返した後も接続を切断しないことで、イベント発生時に即座にクライアントへデータを送信する方式などがあります。また、multipart/x-mixed-replaceという特殊なMIMEタイプを利用して、
サーバー側でコンテンツを更新するたびにブラウザに新しいバージョンを送信する方法もあります。
Java pushletは、
Javaプラットフォームで開発されたプッシュ技術です。この技術では、
サーバーが持続的なHTTP接続を利用してレスポンスを永続的に開いたままにします。これにより、
サーバーはページの内容を更新し続けることができ、プッシュ機能を実現できます。ただし、ブラウザのタイムアウトを制御する手段がないため、タイムアウトが発生した場合はページの再読み込みが必要になるという欠点があります。
Long polling
Long pollingは、厳密にはプッシュ技術ではありませんが、プッシュに似た動作を実現できます。クライアントは
サーバーにリクエストを送信しますが、
サーバーはすぐにレスポンスを返さず、送信する情報が発生するまで待機します。情報が発生したら、
サーバーはHTTPレスポンスを返し、クライアントはすぐに新しいリクエストを送信します。この方法により、通常のポーリングで発生する遅延を減らすことができます。
Flash XMLSocket リレー
Flash XMLSocketリレーは、FlashのXMLSocketオブジェクトを活用したプッシュ技術です。クライアントはリレー
サーバーにTCP接続を確立し、リレー
サーバーはメッセージをFlashソケットに中継します。この方法では、
サーバーはクライアントにメッセージを送信するだけでよいので、効率的な通信が可能です。
その他の技術
Cometは、
Ajaxウェブアプリケーションでプッシュ技術を使用する際の総称です。XMPPもPubSub拡張により、プッシュアプリケーションによく利用されます。近年では、WebSocketやSPDYなど、プッシュ技術に対応した新しいプロトコルも提案されています。IETFが提案したRFC 8030 Web pushプロトコルは、HTTP/2を用いてリアルタイムイベントを即時的に配信するためのプロトコルです。
まとめ
プッシュ技術は、ウェブアプリケーションやリアルタイム通信において重要な役割を担っています。データの即時配信や、ウェブサイトの高速化など、様々な場面で活用されており、今後もその重要性は増していくと考えられます。
出典
[参考資料名](適宜追加)
関連項目
BOSH
クライアント
サーバモデル
ファイル転送
Pull技術
Push Access Protocol
Reverse
Ajax
ストリーミング
外部リンク
W3C Push Workshop
HTTP Streaming with Ajax
HTML Living Standard 9.2 Server-sent events
Server-sent events(日本語訳)
HTTP Server Push at UDAParts
Google Web Toolkit's Server Push FAQ
Ajax Push Engine
XEP-0060: Publish-Subscribe
XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH)
*
XEP-0206: XMPP Over BOSH