假设我有一个通过WebSocket通信的服务器和客户端。它们每次都发送一些数据块,不同的数据块可能有不同的长度。
那么问题来了,如果服务器在一次调用中发送了一个数据块,客户端是否保证能在一个 message
回调函数中接收到它呢?反之亦然。也就是说,WebSocket 是否具有内置的“打包”功能,以便在传输过程中我无需担心我的数据是否分散在多个回调函数中或者没有被完整接收?
假设我有一个通过WebSocket通信的服务器和客户端。它们每次都发送一些数据块,不同的数据块可能有不同的长度。
那么问题来了,如果服务器在一次调用中发送了一个数据块,客户端是否保证能在一个 message
回调函数中接收到它呢?反之亦然。也就是说,WebSocket 是否具有内置的“打包”功能,以便在传输过程中我无需担心我的数据是否分散在多个回调函数中或者没有被完整接收?
因此...
单个WebSocket“消息”可以由无限数量的9,223,372,036,854,775,807字节的片段组成。
这可能会使实现难以通过其API始终将完整的消息传递给您...
因此,虽然在一般情况下,您不需要手动对消息进行分帧,因为WebSocket协议是一种基于消息的协议。但您使用的API可能具有消息大小限制(以允许它保证作为单个块交付消息)或可能提供流接口以允许无限大小的消息。
我曾在标准化过程中抱怨过这个问题,请参见此处。
WebSocket是一种基于消息的协议,如果您将一块数据作为WebSocket消息的有效负载发送,接收方将会收到一个带有该准确数据块作为有效负载的单独WebSocket消息。