WebSocketによるクライアント=サーバー通信 (1/7)
作成:2010-12-17 13:32
更新:2010-12-17 13:32
更新:2010-12-17 13:32
■AjaxからWebSocketへ!
HTML5では、クライアント=サーバー間の通信に関する技術も追加されています。それが「WebSocket」と呼ばれるものです。これにより、Webブラウザからサーバーに、JavaScriptで通信することが可能になります。
……なんて説明すると、「えっ、今までもAjaxとかでできたはずじゃ?」と思うかも知れません。確かにAjaxを利用すれば、JavaScriptを利用してクライアント(Webブラウザ)からサーバーに通信をすることができます。しかし、Ajaxによる通信は、それほど高度なものではないのです。
Ajax通信は、単に「クライアントからサーバーにアクセスし、結果を受け取って終わり」ということしかできません。どういうことかというと、「通信を維持し続けることができない」ということなのです。中には、Cometと呼ばれる技術などのように、Ajaxを巧みに利用して通信し続けるようなものも登場していますが、一般的にはAjaxは「一回こっきりの接続」しかできません。
なおかつ、Ajaxは「PULL」通信であり、「PUSH」ではありません。つまり、こちらからサーバーに取りに行くことはできますが、サーバーからこちらに送ってくる、という使い方はできなかったのです。あくまで「こちらから問い合わせれば、何かを返してくれる」だけであり、何もしてないのに向こうから何か送ってよこす、ということはありません。
そもそも、Ajaxにしろ、アクセするのはすべてHTTPプロトコルを使い、Webサーバーに問い合わせるという形になってしまいます。Webサーバー(HTTPサーバー)は、もともと「常時接続された通信」を行うように設計されていないのです。常時接続を行うためには、HTTPとは別の、新しい通信の仕組みが必要です。
WebSocketは、Ajaxとは異なり、接続を維持した通信を行うための技術です。しかも、PUSH通信が可能なのです。WebSocketは、サーバーとの間に接続を確立すると、それを解放するまでずっと接続を維持し続けます。そして接続している間、こちらから送信するだけでなく、向こうから送ってきたものを随時受け取ることもできます。あらかじめそのためのイベントにコールバック関数を設定しておくことで、いつでもサーバーからの要求に応答できるようになります。
ただし、HTTPではなく、新しいプロトコルを利用するため、Webサーバーにサーバー側の処理を用意して……というわけにはいきません。WebWocket対応のサーバーを用意する必要があります。現状では、まだまだサーバーもクライアント(Webブラウザ)も完璧には対応しておらず、またWebSocketの仕様も完全に確定したわけではないため、今の段階で使い方を覚えても「将来は使えないかもしれない」ということも理解しておきましょう。あくまで、現時点での暫定的なものだ、ということです。
……なんて説明すると、「えっ、今までもAjaxとかでできたはずじゃ?」と思うかも知れません。確かにAjaxを利用すれば、JavaScriptを利用してクライアント(Webブラウザ)からサーバーに通信をすることができます。しかし、Ajaxによる通信は、それほど高度なものではないのです。
Ajax通信は、単に「クライアントからサーバーにアクセスし、結果を受け取って終わり」ということしかできません。どういうことかというと、「通信を維持し続けることができない」ということなのです。中には、Cometと呼ばれる技術などのように、Ajaxを巧みに利用して通信し続けるようなものも登場していますが、一般的にはAjaxは「一回こっきりの接続」しかできません。
なおかつ、Ajaxは「PULL」通信であり、「PUSH」ではありません。つまり、こちらからサーバーに取りに行くことはできますが、サーバーからこちらに送ってくる、という使い方はできなかったのです。あくまで「こちらから問い合わせれば、何かを返してくれる」だけであり、何もしてないのに向こうから何か送ってよこす、ということはありません。
そもそも、Ajaxにしろ、アクセするのはすべてHTTPプロトコルを使い、Webサーバーに問い合わせるという形になってしまいます。Webサーバー(HTTPサーバー)は、もともと「常時接続された通信」を行うように設計されていないのです。常時接続を行うためには、HTTPとは別の、新しい通信の仕組みが必要です。
WebSocketは、Ajaxとは異なり、接続を維持した通信を行うための技術です。しかも、PUSH通信が可能なのです。WebSocketは、サーバーとの間に接続を確立すると、それを解放するまでずっと接続を維持し続けます。そして接続している間、こちらから送信するだけでなく、向こうから送ってきたものを随時受け取ることもできます。あらかじめそのためのイベントにコールバック関数を設定しておくことで、いつでもサーバーからの要求に応答できるようになります。
ただし、HTTPではなく、新しいプロトコルを利用するため、Webサーバーにサーバー側の処理を用意して……というわけにはいきません。WebWocket対応のサーバーを用意する必要があります。現状では、まだまだサーバーもクライアント(Webブラウザ)も完璧には対応しておらず、またWebSocketの仕様も完全に確定したわけではないため、今の段階で使い方を覚えても「将来は使えないかもしれない」ということも理解しておきましょう。あくまで、現時点での暫定的なものだ、ということです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
※関連コンテンツ
「JavaScriptによるHTML5プログラミング入門」に戻る