websocket消息是否会丢失?

时间:2015-09-09 07:57:41

标签: java tcp websocket java-websocket

我目前正在开发Java WebSocket客户端应用程序,我必须确保客户端收到服务器的每条消息。由于连接中断,我是否可能丢失一些消息(一旦从服务器发送)? WebSocket基于TCP,所以这不应该发生吗?

4 个答案:

答案 0 :(得分:7)

可能会发生。 TCP保证数据包的顺序,但并不意味着即使在底层网络中发生不可恢复的故障时,从服务器发送的所有数据包也都会到达客户端。想象一下,当您的应用程序与您的服务器通信时,有人会在最糟糕的时机拔出您的LAN电缆或关闭您的WiFi接入点。 TCP没有克服这样的麻烦。

为确保从服务器发送的每个WebSocket消息都到达客户端,您必须在应用程序层中实现某种SYN / ACK。

答案 1 :(得分:1)

TCP是一种保证协议 - 数据包将由远端较高的应用程序级别以正确的顺序接收(这与UDP是一个发送和希望协议相反)。

一般来说,TCP应该用于所有数据必须在远端正确到达的连接。 UDP用于可以丢弃丢失的数据包而没有重大问题(例如,流服务,NTP更新)

答案 2 :(得分:1)

在我的游戏中,为了应对丢失的Web套接字消息,我为每条消息添加了一个int / long ID。当客户端检测到接收到的ID序列有问题时,客户端将向服务器请求新数据,以便能够正确恢复。

答案 3 :(得分:0)

TCP具有称为控制流的东西 - 这意味着它提供可靠,有序和错误检查的传送。 换句话说,TCP是一种不断检查数据是否到达的协议。

该协议有不同的机制来确保这一点。 您可以在下面的链接中看到TCP和UDP(没有控制流)之间的区别。

Difference between tcp and udp