从Websocket的RFC6455, 有可能控制帧与分段帧交织。为什么Websocket RFC允许控制帧与多帧交织
我不明白它的需要,因为它使发送和接收部分的设计更加复杂。
目前,控制框架可以是“关闭”,“平”和“邦”(其他一切都保留)。
如果控制帧是“关闭”,然后接收碎片的到底是没用的,所以没有交织将被要求(该分段侧可以只发送“关闭”操作码和停止发送任何更多的片段,因为你在“关闭”之后不应该发送任何东西)。
如果控制帧是“Ping”或“Pong”,它没有任何意义。碎片方正在向客户端发送数据,那么为什么它要求对客户端进行ping处理(如果它已经存在)(它已经在发送系统调用中有这个信息)?或者立即回复ping,因为它实际上是向客户端发送数据?因此,为什么我们为什么需要这种机制(交错控制帧)呢?
如果对方能够发送数据给你,那么它会被告知连接被丢弃,因为它不会得到任何ACK(这是TCP协议的工作原理)。同样,如果接收方没有收到任何东西,发送PING将导致TCP错误,所以在这种情况下不需要交织,PING将在分片过程中发生(在套接字的RX部分而不是TX)在分裂的一面。 – xryl669
在应用程序级别,客户端可能正在发送,但无法接收TCP,例如,如果读取线程崩溃。但是我认为交织控制帧的最重要原因是用于检测,以测量服务器和客户端之间的延迟。由于这些新技术的重点在于实现实时通信,因此这种内置乒乓功能是一种有价值的工具。另外请记住,RFC6455是WebSockets的第一个非草稿版本,谁知道我们将来会有哪些控制帧。 – vtortola