首页 > 解决方案 > WebSocket ping 可以在消息中间发生吗?

问题描述

我正在尝试简化嵌入式 WebSocket 实现。具体来说,缓冲当前消息和一些随机插入的 Ping 的要求似乎毫无用处(有人说甚至无法使用;见下文),尤其是在我的应用程序中,它不需要长消息。这个“要求”消耗了 1KB 的嵌入式程序 FLASH、140 字节的 RAM、一些处理时间以及大量的代码审查和测试工作,而且似乎没有任何价值。为什么 Web 浏览器不会也永远不会使用 Ping 中断消息传输,是否有可靠的论据?

RFC 6455,Section 5.4 Fragmentation 说:

控制帧(参见第 5.5 节)可以注入到分段消息的中间。控制帧本身不得分段。

然而,专家解释似乎已经确定协议设计的某些内容会阻止服务器在发送消息时发送 Pongs:

想象一下 WS 客户端在 WS 服务器向客户端发送一个非常文本帧的同一时刻发送一个 WS Ping(比如说 10 MB)。由于 WS 协议设计,在当前帧完全发送到客户端之前,服务器无法发送新帧(也不是 Pong 帧!!!)。

我不确定协议“设计”是什么,它阻止服务器专门在碎片消息中间发送 Pong。相同的“设计”是否还会阻止客户端在碎片消息中间发送 Ping?

标签: websocketembedded

解决方案


推荐阅读