クロムパッケージのアプリケーションにWebSocketサーバーを構築しています。 私はすべての作業(ハンドシェイクとクライアントからサーバーへの受信)を取得しましたが、サーバーからクライアントへメッセージを送信しようとすると、常にエラーが発生します。「失敗:サーバーはクライアントに送信するフレームをマスクしないでください。クロムパッケージのWebSocketサーバー
これは私のprepareMessageコードです:
var sendText = _toUTF8Array(JSON.stringify(msg) + '\n');
var aa;
var buffer;
if (sendText.length > 125) {
if (sendText.length < 65536) {
aa = new ArrayBuffer(4 + sendText.length);
buffer = new Uint8Array(aa);
buffer[0] = 129;
buffer[1] = 126;
buffer[2] = sendText.length >> 8;
buffer[3] = sendText.length & 255;
_arrayCopy(sendText, 0, buffer, 4, sendText.length);
}
else {
aa = new ArrayBuffer(10 + sendText.length);
buffer = new Uint8Array(aa);
buffer[0] = 129;
buffer[1] = 127;
var len = new Uint8Array(8);
len = _Uint64ToUint8(sendText.length);
var tt = new Uint8Array(8);
for (var i = 0; i < 8; i++)
{
tt[7 - i] = len[i];
}
_arrayCopy(tt, 0, buffer, 2, 8);
_arrayCopy(sendText, 0, buffer, 10, sendText.length);
}
}
else {
aa = new ArrayBuffer(2 + sendText.length);
buffer = new Uint8Array(aa);
buffer[0] = 129;
buffer[1] = sendText.length;
_arrayCopy(sendText, 0, buffer, 2, sendText.length);
}
return aa;
既にC#クライアントでテストされています(バイトを見るだけです)。 2番目のバイト(マスク)の最初のビットは '0'なので、マスクされているとは限りません。 –
問題を見つけるには、3つのケースでテストする必要があります。 125未満のメッセージ、125〜65536のメッセージ、それ以上のメッセージ。そうすれば、コードのどの部分が機能していないのかを見つけることができます。それ以外はあなたのコード内で問題は見られません。 Draft10とDraft17と互換性があるようです。あなたの論理演算子がやるべきことをしていることを確認してください。 – Mehran
この問題に関するこのディスカッションをチェックし、役立つかどうかを確認してください。 http://code.google.com/p/phpwebsocket/issues/detail?id=55 –