web-dev-qa-db-ja.com

WebSocketメッセージは順不同で到着できますか?

同じhtml5 WebSocketを介して2つのメッセージを1ミリ秒間隔で送信すると、

メッセージが送信された順序とは異なる順序で到着することは理論的に可能ですか?

47
Alex Lopatin

短い答え:いいえ。

長い答え:

WebSocketはTCPで実行されるため、そのレベルでは@EJPの回答が適用されます。 WebSocketは仲介者(WSプロキシなど)によって「傍受」される可能性があります。これらはWebSocketコントロールフレーム(つまり、WS ping/pongs)を並べ替えることができますが、WebSocket拡張機能がない場合はメッセージフレームを並べ替えることはできません。原則として再注文を許可する適切な場所にネオジ拡張が存在する場合、仲介者が適用できるのは、拡張と適用される再注文ルールを理解している場合のみです。

47
oberstet

彼らが到着することは不可能ですアプリケーションで順不同。ネットワーク上で何かが発生する可能性がありますが、TCPは、送信された順序でバイトを表示するだけです。

17
user207421

ネットワークレイヤーでTCPは、メッセージが順番に到着することを保証するためのものです。アプリケーションレイヤーでは、コードでエラーが発生し、コードのロジックでメッセージが乱れる場合があります。 。これは、アプリケーションが使用しているネットワークスタックまたはアプリケーションコード自体である可能性があります。

あなたが私に尋ねた場合、私のNode.jsアプリケーションはメッセージの送受信を順番に保証できますか?私はノーと言わざるを得ません。 WiFiに接続されたwebsocketアプリケーションを高遅延および低信号で実行しました。パケットがドロップされ、メッセージの順序が狂っているように、非常に奇妙な動作を引き起こします。

この記事は良い読み物です https://samsaffron.com/archive/2015/12/29/websockets-caution-required

0
manit