2

我有一个非常简单的服务器,它使用带有“net”模块的 nodejs 创建。我还有一个使用 luasockets 连接到它的客户端。我正在测试连接大约 2 个月,使用不同的连接,如 3G、GPRS、WIFI,一切都很好。客户端在手机上运行。今天,在测试期间,连接到WIFI,我只是从一个房间走到另一个房间,并且从服务器[nodejs,net module using socket.write]发送的一些消息没有传递到我的客户端应用程序。没有错误,没有部分消息,只是在某个地方丢失了。在服务器上,socket.write() 总是返回 true。消息只是几个字节。就像我说的那样 - 服务器和客户端应用程序在 2 个月内经过多次测试,这是我第一次看到它。我可以一直重现它:

我的问题是..如何检查消息丢失的位置?如何解决这个问题?

编辑:我能够在我的路由器上运行 tcpdump 并发现发送的消息确实通过了路由器,但是它们延迟很大,并且它们被合并成一个数据包。我的 tcpdump foo 非常有限,我不确定是什么导致了延迟。我猜这是因为客户端无法接收消息,并且它们被缓冲在两者之间。无论如何,在如此长的时间内延迟和传递消息让我无法接受,我必须想办法处理它。

4

1 回答 1

0

我们决定在客户端之间以及客户端和服务器之间添加另一种类型的消息来检查连接状态。我们将使用 1 秒计时器从一个客户端向另一个客户端发送消息,如果客户端没有收到超过 3 秒的消息,他们将假定连接被中断并向服务器发送消息,以检查连接是否与服务器是好的[只是让用户知道问题所在]。

于 2013-06-28T08:25:04.303 回答