68

如果我们在同一个 html5 websocket 上发送两条消息,间隔毫秒,

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

4

3 回答 3

72

简短的回答:没有。

长答案:

WebSocket 在 TCP 上运行,因此在该级别 @EJP 的答案适用。WebSocket 可以被中介(如 WS 代理)“拦截”:允许重新排序 WebSocket 控制帧(即 WS pings/pongs),但当没有 WebSocket 扩展时,不允许重新排序消息帧。如果存在原则上允许重新排序的新扩展扩展,那么中介只有在理解扩展和适用的重新排序规则时才能这样做。

于 2012-08-04T14:49:06.090 回答
26

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

于 2012-08-04T04:03:54.697 回答
1

在网络层,假设 TCP 保证消息按顺序到达。在应用程序层,代码中可能会出现错误,并导致您的消息在代码逻辑中出现乱序。它可能是您的应用程序正在使用的网络堆栈或您的应用程序代码本身。

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

这篇文章很好读https://samsaffron.com/archive/2015/12/29/websockets-caution-required

于 2018-08-15T22:33:01.783 回答