ついにRFCに登場!Webサーバとの双方向通信を実現する「WebSocket」

杉山貴章(オングス)
2012-01-06 09:00:00
  • このエントリーをはてなブックマークに追加

WebSocketにアクセスするための「The WebSocket API」

 ウェブページのプログラムからWebSocketの機能にアクセスするにはW3Cによって標準化が進められている「The WebSocket API」を利用する。現在はCandidate Recommendation(勧告候補)の段階にある。

 WebSocket APIの核になるのがWebSocketインターフェースである。アプリケーションでは任意のURLを指定してWebSocketオブジェクトを作成し、サーバとのハンドシェイクやデータの送受信などを行うことができる。

 例えば、次のコードはWebSocket APIを使って「ws://example.com:9876/」に50msに1回データを送信する例である。

WebSocket APIの使用例 (出典:The WebSocket API

var socket = new WebSocket('ws://example.com:9876/");
socket.onopen = function () {
  setInterval(function() {
    if (socket.bufferedAmount == 0)
      socket.send(getUpdateData());
  }, 50);
};

 WebSocketオブジェクトのreadyState属性はコネクションの状態を表す。データの送信はsend()メソッドで行うが、実際に送信されるまでの間は待ち行列に追加される。bufferedAmountはこの待ち行列に入っているデータのバイト数を表す。つまり、この値が0のときは送信が完了しているということになる。

 WebSocketプロトコルとWebSocket APIは、ともにまだ策定途中の段階だが、少しずつ完成に近づいてきている。これがウェブサーバやブラウザの実装として正式に採用されれば、Cometのような回り道をすることなく、本当の意味での双方向通信を実現できる。Webアプリケーションの開発者にとっては必須の技術になるはずだ。

キーワード解説一覧

Keep up with ZDNet Japan
ZDNet JapanはFacebookページTwitterRSSNewsletter(メールマガジン)でも情報を配信しています。

  • コメント(2件)
#1 m11m   2012-01-06 20:23:50
>>(これをポーリングと呼ぶ)
呼びません。
#2 builder編集部   2012-01-06 21:50:42
m11m 様

builder編集部です。ご指摘、ありがとうございました。

「ポーリング」についてですが、ご指摘の通り誤りでしたので、下記の通り修正いたしました。

修正前:
Cometは、サーバ側でリクエストに対する保留状態を作っておき(これをポーリングと呼ぶ)、任意のタイミングでレスポンスを返すという方法によってプッシュ配信を実現する。

修正後:
サーバ側でリクエストに対する保留状態を作っておき、任意のタイミングでレスポンスを返すという方法によってプッシュ配信を実現する(この方式を「ロングポーリング」と呼ぶ)。

この度はご迷惑をおかけしまして、誠に申し訳ございませんでした。
今後もご愛読頂ければ幸いです。よろしくお願いいたします。
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]