Home » Web » WebSocketサーバを作る(3)

WebSocketサーバを作る(3)

ブラウザへ文字列を送信する

今度は、サーバからブラウザへ、文字列データを送信する処理です。
送信データの場合も、ブラウザからの受信データと同じように、フレームに整形してから送ります。
送信データのデータ長、maskのあり/なしに注意してフレームデータを作ります。
整形ルールは受信時と同じなので、ここでは細かい説明は省きます。

注意点として、サーバからブラウザへの送信の場合は、送信データ本体の暗号化はしません。
そのため、maskは’0’、maskキーは不要となります。

エコー機能を実装する

ブラウザからの受信、サーバからの送信、この2つを組み合わせてエコー機能を実装します。
下のソースコードは その(1) でハンドシェイクの実装例として紹介した子プロセス処理です。
このソースの80行目以降が、ハンドシェイク後の、データの送受信処理になっています。

ブラウザが”/echo”プロトコルを要求した場合、protocol.compare(“echo”)の分岐に入り、decodeReceiveData()(その(2) で実装例を示した関数)で取得した受信データを、encodeSendData()(今回紹介した関数)で送信データに整形します。

最後に、write()でソケットにデータを書き込むことで、ブラウザへ送信データが送られます。

ソースコード

今回紹介しているソースコード一式を公開します。
64bitのデータ長に対応してなかったり、opcodeがtextしかサポートしてなかったり、WebSocketサーバとしては不完全ですので、あくまで参考用としてお使いください。

https://github.com/yusuke366/websocketd

Post Tag With :

3 Responses so far.

  1. なべ3 より:

    とても参考になりました。encodeSendData()関数ですが、
    frameHeader[3-i] = (payload_data_len&(0xff<>(i*8);
    という行の (i+8) の部分は (i*8) の間違いですよね?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です