トップページ >  HTML5 >  Web Socket
初版2011/08/25: 最終更新日2011/08/25
Web Socket
目次
Web Socketとは
Web Socketの使い方
Web Socketサーバ
Web Socketとは

Web Socketは、ソケットライクな通信をサポートする仕組みです。

一つのTCPコネクション上で、任意のタイミングの双方向通信を行うことが可能です。
またデータの送受信を少ないオーバーヘッドで行えるようにデザインされています。
サーバとネットワークリソースを低減し、リアルタイム性の高いサービスを低コストで実現することが出来るようになります。

仕組み

簡単に言えば、Web上でTCPソケット通信を可能にしたものです。
通信以下の手続きで行われます。

  1. コネクションの確立
  2. サブプロトコルを指定
  3. データの通信(タイミングは任意)
  4. コネクションの切断

各ブラウザの対応

Web Socketは、2011年8月現在以下のブラウザで対応しています。
Safari 5~、Google Chrome 10~

Web Socketの使い方

ここではクライアント(ブラウザ)側での使い方を示します。
Web Socketは、WEBブラウザ上のJavascript上で利用します。
Web Socketのスキーマは以下の通りです。

ws://
平文のプロトコル(httpに相当。ポートも80番など)
例)
ws://(ドメイン)/(リソース名)
wss://
暗号化(SSL)のプロトコル(httpに相当。ポートも443番など)
例)
wss://(ドメイン)/(リソース名)

上記のドメインとは、接続するWebSocketのサーバのドメインです。
リソース名は、そのサーバ上のリソースです。

コネクションの確立とサブプロトコルの指定

WebSocketクラスから、WebSocketオブジェクトを作ることでコネクションを確立します。
同時にサブプロトコルを指定します。

var ws = new WebSocket("ws://(ドメイン)/(リソース名)","(サブプロトコル)");

ws.onload = function( event ){
	/*
	コネクション接続完了時の処理を記述します。
	*/
}

サブプロトコルとは、TCPでのポート番号に相当するものです。
httpだと80番、SSHだと22番などと同様に、WebSocketコネクション上で用いるプロトコルです。
ポート番号と違い、任意の文字列で指定することができます。
(記述のルールについては、まだ具体的には決まっていません。)

データの送受信

WebSocketサーバへメッセージを送信する場合は、「send」メソッドを使います。
受信する場合は、「message」イベントで受け取ります。
送受信データは、テキスト形式のみです。
そのため、オブジェクトや配列を送りたい場合は、JSON形式に変換して送受信します。
また、文字コードはユニコード(UTF-8)で送受信するように作られています。
shift_jis、EUC-JPの場合は変換が必要です。

// サーバにメッセージを送る。
ws.send('メッセージ');

// サーバからメッセージを受け取る
ws.onmessage = function( event ){
	/*
	受信データに対する処理を記述します。
	*/
}

コネクションの切断

コネクションの切断は、「close」メソッドを用い、切断されたことを「close」イベントで受け取ります。
コネクション切断要求は、サーバ側からも行えます。
その場合も「close」イベントが発生します。

// コネクションを切断する。
ws.close();

// コネクションが切断された。
ws.onclose = function( event ){
	/*
	コネうションを切断した後の処理を記述します。
	*/
}
Web Socketサーバ

Web Socketは、クライアント(ブラウザ)だけでは機能しません。
Web Socketサーバが必要です。

Web Socketサーバは、各言語でその実装ライブラリが準備されつつあります。
以下に、その一例を紹介します。

pywebsocket
http://code.google.com/p/pywebsocket/
Googleが開発したpythonベースのWeb Socketサーバです。
PHP WebSocket Server
http://siriux.net/2010/08/php-websocket-server/
PHPペースベースのWeb Socketサーバです。
rev-websocket
http://d.hatena.ne.jp/viver/20100717/p1
PHPペースベースのWeb Socketサーバです。

現状は、まだ実験的な実装がほとんどです。