Websockets无法解决“收到意外的延续帧”错误

时间:2012-05-08 00:08:38

标签: php firefox google-chrome websocket

我写了一个算法来处理PHP中的Websockets数据。从Chrome / Firefox解码很好,但我一直在将数据从服务器发送到客户端时遇到问题(Chrome 18,Websockets 13)。服务器例程在收到消息后自动响应“已接收”。

Continuation frame error.

消息后面绝对没有其他字节,因为STDOUT指示和WireShark转储指示(通过RawCap检索的数据)。在WireShark / RawCap中,出于某种原因,服务器>客户端消息出现在“ACK”消息下。

STDOUT

Wireshark

我真的很感谢某人对此的见解。这让我发疯了。

达斯汀奥普雷亚

1 个答案:

答案 0 :(得分:5)

我明白了。事实证明,我最初采用的代码在握手响应头之后的换行符之后放置了一个NULL字符,我没有注意到这一点。看起来像a)浏览器通过字符缓冲区移动所有收到的websocket消息,一旦处理完认证响应,就会在前面留下单个NULL字符,b)直到-next-消息才出现问题收到了。

流速:

1)浏览器(Chrome和Firefox)收到握手响应,最后加上一个额外的NULL 2)浏览器批准握手响应 3)浏览器向服务器发送消息(在这种情况下,带有“文本”操作码,而不是必须重要)。 4)服务器正确解码帧 5)服务器通过建立的websocket会话发回消息 6)客户抱怨意外的延续框架。

在某些情况下,我相信我能够操纵消息来抑制浏览器中的错误,但仍然没有在浏览器中收到服务器消息。

作为上述示例,我认为,最初,服务器发送了“响应”的自动文本响应,并得到上面的消息。我后来改为“1234”,仍然得到上面的信息。但是,我将其更改为“123”,并且不再出现错误,但仍未在Javascript中收到消息事件。

达斯汀奥普雷亚