Websockets 消息丢失

Posted

技术标签:

【中文标题】Websockets 消息丢失【英文标题】:Websockets message loss 【发布时间】:2011-07-21 14:55:38 【问题描述】:

在使用 websockets 时,我注意到一些消息丢失。我正在尝试在移动 safari(客户端)和 c#(服务器)之间进行通信。我正在使用 superWebSocket (opensource) 作为服务器,所以它可能是一个服务器错误...

但只有在连接拥塞时才会删除消息(当我发送大量消息时)。这对我来说是 UDP 的“reaks”,但我记得在某处读到 web-sockets 是 TCP。

在任何情况下,我可能会在 javascript 中发出“发送”命令,而接收方没有收到消息?

【问题讨论】:

WebSockets 确实是 TCP。这可能是浏览器问题或服务器错误,但不是 UDP。 您的问题可能不是浏览器的错误,可能只是您需要处理的normal 网络问题。 TCP 可以lost 消息,如果 tcp 连接中断/重置。当您在协议中收到来自对等方的 ack 时,您只能知道对等方看到了消息。服务器第一条消息可能会在 websocket 中丢失,这让这种感觉更糟:***.com/a/47435420/1586797 【参考方案1】:

我一直在高流量应用程序中以及在单个丢失消息(在任一方向)是致命的情况下广泛使用 WebSockets。我从来没有见过任何消息丢失。但是,我确实记得在某处看到过关于同一问题的帖子或问题,并且那个人也在使用 superWebSocket 作为服务器。所以我强烈怀疑 superWebSocket 有 bug。

如果您使用非移动浏览器,您会遇到同样的问题吗? ios 浏览器(我假设这就是移动 Safari 的意思)可能存在 WebSocket 错误。我没有用 WebSockets 广泛测试那个浏览器。我在 Linux 和 Windows 上广泛测试了 Chrome、Firefox(启用了 WebSocket)和 Opera(启用了 WebSocket),并在 Windows 上测试了 Safari。

除非整个连接失败,否则不会允许 Javascript 中的发送无法到达服务器。如果发生这种情况,则某处存在错误。

【讨论】:

这个问题很老了。它指的是旧的(过时的)websockets 服务器,以及大多数移动浏览器一开始都没有实现 websockets 的 iOs(3 或 4)。我再也没有遇到过这个问题。

以上是关于Websockets 消息丢失的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ的消息可靠性(防止消息丢失)

消息队列如何保证消息不丢失

Kafka的消息可靠性(防止消息丢失)

由于 openfire 连接丢失而丢失消息

消息队列漫谈:消息丢失,消息重复,消息积压一些处理方式

GCP Pubsub 中的消息丢失和重复