To enable Web applications to maintain bidirectional communications with server-side processes, this specification introduces the WebSocket interface. |
現行のJavaScript AjaxアプリケーションはXMLHttpRequestをサーバとの非同期通信メソッドとして使っている。ブラウザからサーバへのアクセスが基本であり、サーバからはリクエストへの返信という形でデータがやりとりされる。HTTP通信が基本であるため、リクエストを出すごとにHTTPのやりとりが実施される。
この状況を改善するためにW3Cで策定が進められている仕様のひとつにThe Web Sockets APIがある。Web Sockets APIはブラウザとサーバの双方向通信を規定するもので、Webアプリケーションの開発をより簡単にし、動作をよりシンプルで高速なものにする。XMLHttpRequestと違いWeb Sockets APIでは通信が双方向になり、リクエストに返信する形ではなくサーバからブラウザへ直接データを送れるようになる。サーバからのデータを受け取るとJavaScriptにおけるイベントとして処理される。
WebSocketインタフェース | 名前 | 型 | 備考 |
---|---|---|---|
コンストラクタ | WebSocket(DOMString url) | ||
WebSocket(DOMString url, DOMString protocol) | |||
定数 | CONNECTING = 0 | unsigned short | |
OPEN = 1 | unsigned short | ||
CLOSED = 2 | unsigned short | ||
属性 | URL | DOMString | リードオンリー |
unsigned short | readyState | リードオンリー | |
unsigned long | bufferedAmount | リードオンリー | |
onopen | Function | ||
onmessage, onclose | Function | ||
onclose | Function | ||
関数 | send(DOMString data) | ||
close() |
ブラウザにおけるWeb Sockets APIの実装は現在開発段階にあるが、Chromium Blog: Web Sockets Now Available In Google ChromeによるとChrome 4.0.249.0にWeb Sockets APIの実装を追加されたという。Web Sockets APIを試してみるにはHTTPサーバ側での対応も必要になるが、pywebsocketを使うことで実現できるとも説明されている。pywebsocketはPythonで実装されたApache HTTPサーバのモジュールとして動作するWeb Sockets API対応拡張。スタンドアロンでサーバとして動作することもできるという。
Web Sockets APIの実装はFirefoxでも2009年のはじめから進められているが、執筆現在ではまだ開発版にはマージされていない (Bug 472529 – Support for Web sockets' HTML5 Draft Recommendation (websocket))。しかし、Firefoxへのマージはそう遠い先のことではないように見える。
Web Sockets APIを使った通信ではThe Web Socket protocolと呼ばれる専用のプロトコルが利用される。HTTPと違い通信を開始したらクローズするまでは通信が保持されるため、XMLHttpRequestよりも通信効率がいい。また、ブラウザと同じレベルでのセキュリティを提供する必要があることからTCPを直接利用するような仕組みではなく、独立したプロトコルとして定義されている。Web Sockets APIの実装にはブラウザが提供することになるとみられるが、JavaScriptで同機能を実装したライブラリもある。