0

成功握手后,我尝试根据最新协议向 Chrome 发送消息。我以纯文本形式发送未屏蔽,未编码,并且未chr(0)or包围chr(255)。第一条消息发送得很好,谷歌浏览器没有关闭连接(虽然它没有触发onmessage-event,但是当我发送第二条消息时,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 回答