17

私は現在 Java WebSocket クライアント アプリケーションを開発しており、サーバーからのすべてのメッセージがクライアントによって受信されることを確認する必要があります。接続の中断により、(サーバーから送信された後に) 一部のメッセージが失われる可能性はありますか? WebSocket は TCP に基づいているため、これは発生しないはずです。

4

4 に答える 4

20

起こり得る。TCP はパケットの順序を保証しますが、基盤となるネットワークに回復不能な障害が発生した場合でも、サーバーから送信されたすべてのパケットがクライアントに到達するとは限りません。アプリケーションがサーバーと通信しているときに、最悪のタイミングで誰かが LAN ケーブルを抜いたり、WiFi アクセス ポイントのスイッチを切ったりすることを想像してみてください。TCP はこのような問題を解決しません。

サーバーから送信されたすべての WebSocket メッセージがクライアントに確実に届くようにするには、アプリケーション層に何らかの SYN/ACK を実装する必要があります。

于 2015-09-09T08:49:51.483 に答える
2

TCP は保証されたプロトコルです。パケットは、遠端の上位アプリケーション レベルによって正しい順序で受信されます (これは、送信および希望プロトコルである UDP とは対照的です)。

一般的に言えば、すべてのデータが遠端に正しく到達する必要がある接続には、TCP を使用する必要があります。UDP は、重要な問題なしに失われたパケットをドロップできる場合に使用されます (ストリーミング サービス、NTP 更新など)。

于 2015-09-09T08:13:54.793 に答える
0

TCP には、制御フローと呼ばれるものがあります。これは、信頼性が高く、順序付けられた、エラー チェック済みの配信を提供することを意味します。つまり、TCP は、データが到着したかどうかを常にチェックするプロトコルです。

このプロトコルには、それを保証するためのさまざまなメカニズムがあります。以下のリンクで、TCP と UDP (制御フローがない) の違いを確認できます。

tcp と udp の違い

于 2015-09-09T08:28:44.117 に答える