概要
・動的に表示内容を更新するWebサイト、Webアプリケーションを実装するために常に最新の情報を表示したい。
・そのために、任意のタイミング(リアルタイム)でクライアント−サーバ間でデータの送受信を行う必要がある。
Ajax(Asynchronous JavaScript and Xml)
ページの遷移やリロードをせずに、ページの一部を置き換える技術。名前の通りXMLとJavaScriptを使って非同期のリクエストをサーバに送って、レスポンスをページに反映させる。 |
・接続1回に対して、情報の取得は多くて1回。
・クライアントは定期的に、サーバに接続を行う必要がある。(ポーリング)
・クライアント側からのみ、リアルタイムに送信可能。
・サーバ側の情報はクライアントが取得しにいく必要がある。
Comet
サーバがリクエストを受け取ってもすぐにレスポンスを返さず、限界まで接続しておくことでサーバからの通知機能を実現開いている。接続中であれば、サーバで発生したイベントを即座に知ることができる。接続負荷が大きいという欠点がある。 |
・サーバは応答を返すのをできるだけ引き延ばす。(ロングポーリング)
・引き延ばす時間に限界があるため、最接続が必要。
・サーバ側からリアルタイムに送信が可能。
・クライアント側からの送信はAjaxで別に行う必要がある。
Webソケット
W3CとIETFがクライアント−サーバ間の通信を行う為に規定している双方向通信用の技術規格。AjaxやCometで利用されていたXMLHttpRequestの欠点を解決する技術として開発された。 |
・一度接続してしまえばつなぎっぱなしでOK!
・接続が切れない限り、最接続が不要。
・クライアント/サーバの双方からリアルタイム送信が可能。
・接続の確立はクライアントから行う必要がある。
総評
サーバ側でイベントが発生したときにリアルタイムに更新したい場合など、総合的にWebソケットを使ってリアルタイムWebを実現するのが良さそう。
AjaxとCometの欠点を補ってできた技術というだけあって、Webソケットにはほとんど欠点がない?対応してないブラウザがあるのとノウハウが少ないくらい?
双方向性 | リアルタイム性 | 接続処理負荷 | 接続の継続性 | |
Ajax | × | ○ | △ | × |
Comet | ○ | ○ | × | △ |
Webソケット | ◎ | ◎ | ○ | ◎ |