成功握手后,我尝试根据最新协议向 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;
}
现在它起作用了?!尽管编码应该无关紧要,因为无论如何它都在描述之后。不过,我不会抱怨。