0

ハンドシェイクが正常に完了した後、最新のプロトコルに従ってChromeにメッセージを送信しようとします。マスクせず、エンコードせず、プレーンテキストで、またはで囲まずに送信chr(0)しますchr(255)。最初のメッセージは正常に送信され、Google Chromeは接続を閉じません(ただし、-eventは発生しませんonmessageが、2番目のメッセージを送信すると、Received unexpected compressed frame-errorが発生し、接続が終了します。その理由と方法を教えてください。修理する?

%x1編集:私の推測では、メッセージの最後に、テキストオペコード(意味は何でも、PHPで表現されているものは何でも)のようなある種のオペコードを追加し、別のオペコードを追加する必要があります。

編集:すべての中で最も奇妙なことが起こりました:私はもう一度他の質問のコードを試しましたが、base64エンコーディングを非アクティブ化しました:

private static function encode($text) {

    // $text = base64_encode($text);

    // 0x1 text frame (FIN + opcode)
    $b1 = 0x80 | (0x1 & 0x0f);
    $length = strlen($text);

    if ($length <= 125)
        $header = pack('CC', $b1, $length);
    elseif ($length > 125 && $length < 65536)
        $header = pack('CCn', $b1, 126, $length);
    else
        $header = pack('CCN', $b1, 127, $length);

    return $header . $text;

}

そして今、それは機能しますか?!とにかく説明の後にあるので、エンコーディングは問題ではないはずですが。でも文句は言いません。

4

1 に答える 1

1

ハンドシェイク後のメッセージはプレーンテキストとして送信されません。詳細については、仕様のデータフレーミングのセクションを参照してください。または、phpサーバーの作成方法に関するアイデアについては、最近の質問を参照してください。(その質問のコードは、完全に機能しなかったために投稿されたものであることに注意してください。回答で提案された変更を適用する必要があります。)

編集:仕様のセクション5.1を参照してください。クライアントはメッセージをマスクする必要があります。サーバーは、送信するメッセージをマスクしてはなりません。サーバーからマスキングを削除してみてください。

于 2012-06-10T08:33:54.393 に答える