【发布时间】:2014-01-28 05:41:30
【问题描述】:
想象一下,我有服务器和客户端通过 WebSocket 进行通信。每次发送另一块数据。不同的块可能有不同的长度。
我可以保证,如果服务器在一次调用中发送块,那么客户端将在一次message 回调中接收它,反之亦然?即,WebSocket 是否具有嵌入的“打包”功能,所以我不必关心我的数据在传输过程中是否在多个回调中拆分?
【问题讨论】:
想象一下,我有服务器和客户端通过 WebSocket 进行通信。每次发送另一块数据。不同的块可能有不同的长度。
我可以保证,如果服务器在一次调用中发送块,那么客户端将在一次message 回调中接收它,反之亦然?即,WebSocket 是否具有嵌入的“打包”功能,所以我不必关心我的数据在传输过程中是否在多个回调中拆分?
【问题讨论】:
WebSocket 是一种基于消息的协议,因此如果您发送一个数据块作为 WebSocket 消息的有效负载,对等方将收到一个单独的 WebSocket 消息,其中该数据块作为有效负载。
【讨论】:
理论上,WebSocket 协议是一种基于消息的协议。但是,请记住...
所以...
单个 WebSocket“消息”可以包含无限数量的 9,223,372,036,854,775,807 字节片段。
这可能会使实现难以始终通过其 API 向您传递完整的消息...
因此,在一般情况下,您的问题的答案是 WebSocket 协议是基于消息的协议,您不必手动构建消息。您用于使用该协议的 API 可能具有适当的消息大小限制(以允许它保证消息作为单个块传送),或者可能提供流接口以允许无限大小的消息。
我在标准化过程中对此大喊大叫here。
【讨论】: