websocket消息可以无序到达吗?

时间:2012-08-03 23:55:50

标签: html5 networking websocket socket.io

如果我们通过相同的html5 websocket发送两条消息,彼此分开毫秒,

从理论上讲,消息的到达顺序是否与发送的顺序不同?

3 个答案:

答案 0 :(得分:44)

简短回答:不。

答案很长:

WebSocket在TCP上运行,所以在这个级别@EJP的答案适用。 WebSocket可以被中间人(如WS代理)“截获”:允许那些WebSocket控制帧(即WS ping / pongs)重新排序,但是当没有WebSocket扩展时,允许重新排序消息帧。如果存在原则上允许重新排序的新的扩展,那么中间人只有在理解了适用的扩展和重新排序规则时才可以这样做。

答案 1 :(得分:17)

他们无法在您的应用程序中到达。任何事情都可能在网络上发生,但TCP只会按照发送顺序向您显示字节。

答案 2 :(得分:0)

在网络层,TCP应该保证消息按顺序到达。在应用程序层,代码中可能会发生错误,并导致您的消息在代码逻辑中混乱。可能是您的应用程序正在使用的网络堆栈,也可能是您的应用程序代码本身。

如果您问我,我的Node.js应用程序能否保证按顺序发送和接收消息?我不得不说不。我已经在高延迟和低信号下运行了连接到WiFi的websocket应用程序。它会导致非常奇怪的行为,就像数据包被丢弃且消息不正确一样。

本文是一本不错的https://samsaffron.com/archive/2015/12/29/websockets-caution-required