HTTP WebSocketサーバー

WebSocketサーバー

nine HTTP サーバー機能では、WebSocket サーバー機能を実装している。 対応している WebSocket 仕様は、インターネットドラフトの 75版76版 の両方である。

WebSocket 仕様はドラフト段階であり、将来的に互換性の無い変更が為されたり、標準未採択となる可能性がある。

クラス関係図

WebSocket サーバークラス関係図

WebSocketHeader

WebSocketフレーム情報を格納したクラス。
type
フレームの最初の 1byte. 0x00 ならば UTF-8 フレーム、0x80 ならば長さ付きのバイナリフレームである。
length
フレームタイプが 0x80 の場合において、データの前に付くサイズ情報を示す。

WebSocketChannel

通信用のクラス。WebSocket フレームを送信する時に使う。

Buffer* beginFrame00(size_t)
0x00型フレームの送信を始める。データの本文は返り値の Buffer に書きこむ。
フレームワークは Buffer 内容をそのまま送信する。ユーザーは UTF-8 符号化したデータを書き込む必要がある。終端の 0xFF は書きこまなくてよい。
Buffer* beginFrame80(size_t)
0x80型フレームの送信を始める。データの本文は返り値の Buffer に書きこむ。
フレームワークは Buffer 内容をそのまま送信する。
void endFrame()
フレーム書き込みを終えたら呼ぶ。

WebSocketHandler

イベントハンドラクラス。WebSocket フレーム受信時などにこのクラスの各種ハンドル関数が呼ばれる。

void onWebSocketAccept(int aid, WebSocketChannel*)
WebSocket 接続が開始したら呼ばれる。実装で必要な初期化や、タイムアウト指定などを行う。
void onWebSocketClose(WebSocketChannel*)
WebSocket 接続が閉じられたら呼ばれる。
void onWebSocketReceive(WebSocketChannel*, const WebSocketHeader*, Buffer*)
フレーム全体を受け取った後に呼ばれる。フレーム情報は WebSocketHeader に、フレーム本文は Buffer に入っている。
アプリケーションは WebSocketChannel を用いて応答する。詳しくは チュートリアルを参照。