想象一下,我有服务器和客户端通过WebSocket进行通话。每个时间都发送另一个数据块。不同的块可能有不同的长度。
我保证,如果服务器在一次呼叫中发送chunk,那么客户端将在一个message
回调中接收它,反之亦然?即,WebSocket是否嵌入了“打包”功能,所以我不必关心我的数据在传输过程中是否在几个回调之间被分割,或者它没有?
答案 0 :(得分:8)
理论上,WebSocket协议提供了基于消息的协议。但请记住......
因此...
单个WebSocket"消息"可以包含无限数量的9,223,372,036,854,775,807字节片段。
这可能会使实施难以通过其API始终向您发送完整的消息......
因此,在一般情况下,您的问题的答案是WebSocket协议是基于消息的协议,您不必手动构建消息。您用于使用协议的API可能具有适当的消息大小限制(以允许它保证将消息作为单个块传递),或者可以提供流式接口以允许无限大小的消息。
我在标准化过程here期间对此大肆渲染。
答案 1 :(得分:4)
WebSocket是一种基于消息的协议,因此如果您将一大块数据作为WebSocket消息的有效负载发送,则对等方将收到一条单独的WebSocket消息,其中包含与有效负载完全相同的数据块。