Websockets 消息完整性

Websockets message integrity

当在客户端和服务器之间使用 WebSocket 全双工数据连接时,我能否保证从服务器发送两条消息时,我会在客户端收到这两条完全相同的消息,TCP 没有 ?

换句话说,如果服务器依次发送hello,然后发送its me,那么客户端是否总是收到包含helloits me的两条消息,或者是客户端可能会收到 helloit 然后 s me 甚至只有一条消息 helloits me ?

如果连接非常糟糕,您可能会丢失一条消息(但是应该使用 tcp 重新发送),但不太可能以这种方式拆分。 每条文本消息都有边界 - 开始 (0x00) 和结束 (0xFF) 字节。浏览器不应混淆消息。 您可能会按其他顺序收到消息。

如何才能更确定:

  1. 将您自己的控制和添加到消息中(但确实是开销)。
  2. 使用 wss (websockets+tls/ssl) 协议 - 损坏的消息将无法很好地解密。

WebSocket 最初有文本消息的开始和结束字节,但那是旧信息。 (2011 年 12 月)框架中有一个长度组件。顺便说一句,在框架规范中有一个标志,指定框架是整个 "message" 还是一个 "message fragment",即还有其他框架组成这个 "message"。由接收器正确组合片段以传递给应用程序代码。通常你不必考虑这个,除非你有非常大的 "messages"(将 WS "messages" 视为 "data" 而不是真正的消息......WS 并不是真正的 "messaging"协议本身)。

但请注意,WebSocket 是一种低级传输。可以将其视为基于 Web 的 TCP。应用程序程序员应该使用高级协议 "over WS/WSS" 而不必担心排序、重新连接、存在、pub/sub、元组空间、保证交付等。如果我们不这样做,数十和将重新发明数十种具有数十年历史的应用程序协议。