我是做错了什么,还是echo.websocket.org没有回显空的有效载荷?

我是做错了什么,还是echo.websocket.org没有回显空的有效载荷?,websocket,Websocket,对于websockets协议13(RFC 6455),任何给定帧的有效负载长度都可以为0 帧有效载荷数据;n*8位输入 ; 长度,在哪里 ; n>=0 我正在按照这个规范构建一个websocket客户端,但是当我向echo.websocket.org发送一个带有空负载的框架时,我什么也没有得到。我也有同样的经历: 这对我来说很麻烦,因为我构建客户机的方式要求我在发送多帧消息时发送空帧 这仅仅是Echo测试服务器中的一个bug吗?大量服务器实现是否会丢弃带有空有效负载的帧 如果这是Echo测

对于websockets协议13(RFC 6455),任何给定帧的有效负载长度都可以为0


帧有效载荷数据;n*8位输入
; 长度,在哪里
; n>=0

我正在按照这个规范构建一个websocket客户端,但是当我向echo.websocket.org发送一个带有空负载的框架时,我什么也没有得到。我也有同样的经历:

这对我来说很麻烦,因为我构建客户机的方式要求我在发送多帧消息时发送空帧

这仅仅是Echo测试服务器中的一个bug吗?大量服务器实现是否会丢弃带有空有效负载的帧


如果这是Echo测试中的一个bug,有人知道我如何与他们联系吗?KAAZING站点只有他们自己产品的技术支持联系信息。

如果您发送的数据帧没有有效负载,则不会有任何回音。这种行为完全正确。然而,发送回负载为0的数据帧也可能符合标准。主要的问题是,如果应用层收到通知,那么当接收到没有有效负载的数据帧时。在大多数实现中,情况可能并非如此

对于TCP,这是类似的:TCP Keepalive是一个负载为0的数据报。它由远程TCP堆栈确认,但应用程序层不知道它(即select()不返回或read()-syscall仍处于阻塞状态),这是预期的行为


应用层协议不应该依赖于数据报来构造数据,而应该仅仅期望字节流,而不考虑它们是如何传输的。

我刚刚在websocket.org上用空的有效负载尝试了echo测试,使用Chrome、Safari和Firefox(每种协议的最新版本)似乎都可以正常工作。您使用的是哪种浏览器

顺便说一句,该演示程序不遵守任何“echo协议”(afaik),因此没有正式的规范规定如何处理WebSocket帧集中的空数据


如果您在使用WebSocket时需要帮助,有一些Kaazing论坛:。

符合什么标准才能发回空框架?据我所知,没有回声标准。echo服务器正在响应部分帧(即未设置
FIN
set的帧),我假设这些帧不会被中继到应用层。至少,我希望它能回应
FIN
。此外,也许“客户”这个词用得不好。我正在构建一个传输层接口。这就是我的意思,它没有定义,因此实现可以决定如何处理它。没有浏览器,我使用的是自定义客户端。“好好工作”是什么意思?在Firefox中发送一个空的负载并没有为我得到任何回报。“工作正常”意味着我得到了一个回显到我的浏览器。当然没有味精的内容,但我得到了一个“回复”。这很有趣。我对没有得到一个空帧的回音还行,但由于空帧也是一个FIN,它实际上导致协议崩溃。我刚刚尝试了Firefox 43.0.4,得到了预期的空消息响应。100%正确。此时不存在WS-ECHO标准规范(如TCP PING)。此外,Websocket.org上的WS-server完全符合RFC6455,并处理部分帧。对于所有帧,甚至部分帧,都会激发onmessage()。由该层之上的应用程序协议决定是否公开该信息。例如,我们基于WS的JMS库不在JMS层公开部分框架知识;我们“在引擎盖下”处理这个问题。与我们的AMQP和XMPP库相同。也。。。TCP和WS只是粗略的分析。