websocket消息可以无序到达吗?

Ale*_*tin 46 networking html5 websocket socket.io

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

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

obe*_*tet 47

简答:不.

答案很长:

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


use*_*421 17

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

  • IMO回答错了.我也在那里贴了它. (3认同)
  • @BadZen 这是一个 node.js 问题,即应用层问题,而不是 WebSocket 或 TCP 问题。消息不能无序到达*应用程序中*。应用程序代码当然可以按照它喜欢的任何方式修改顺序。 (3认同)
  • FWIW 我确实在 FF 开发版本 45.3.0 中看到了严重的无序行为。我观看了网络流,我的“1”、“2”、“3”、“4”...等都按顺序在线上,但是 JS websocket 的 .onmessage() 函数被任意调用。(只需在回调中将消息附加到文档正文:3 2 1 6 5 4 9 8 7...)不要相信消息顺序。 (2认同)
  • @Marquis of Lorne - 相反,问题中绝对提到了node.js。“socket.io”是问题的标签之一,而socket.io基于node.js之上——没有node.js就没有socket.io在运行。 (2认同)