6

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

续帧错误。

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

标准输出

线鲨

我真的很感激有人对此的见解。这让我疯狂。

达斯汀奥普雷亚

4

1 回答 1

5

我得到了它。事实证明,我最初采用的代码在握手响应标头之后的换行符之后放置了一个 NULL 字符,而我没有注意到这一点。它看起来像 a) 浏览器将所有接收到的 websocket 消息通过一个字符缓冲区移动,一旦处理了身份验证响应,该缓冲区就会在前面留下单个 NULL 字符,并且 b) 在 -next- 消息之前它不是问题收到了。

流动:

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

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

作为上面的一个例子,我相信,最初,服务器正在发送“响应”的自动文本响应,并得到了上面的消息。后来我把它改成了“1234”,还是得到了上面的信息。但是,我将其更改为“123”,不再收到错误消息,但仍然没有收到 Javascript 中的消息事件。

达斯汀奥普雷亚

于 2012-05-08T14:00:33.353 回答