【发布时间】:2012-03-01 20:19:03
【问题描述】:
我们正在开发一款在线游戏,玩家使用持久的 TCP 连接与服务器进行通信。与持久化一样,它的生命周期是玩家会话的生命周期,如果连接关闭,玩家将被从游戏中抛出(尽管客户端会尝试自动重新连接)。
问题
现在,当然,我们办公室的一切正常(连接到测试服务器和实时服务器),但我们的客户报告说,一些玩家经常断开连接(每隔几秒),而且他们自己也经历过这种情况(尽管他们的办公室在同一栋楼内)。
问题
我怎样才能找出这些断开连接的原因?是因为:
- 玩家的互联网连接不好,无法解决。
- 玩家与服务器(土耳其 荷兰)之间的距离太长。
- 服务器(CentOS 机器)或数据中心出现问题。
- 服务器过载(尽管在低负载下也会发生)。
- 我们的软件有错误。
- 还是其他原因?
该软件是用 Java 编写的。它会在玩家断开连接时记录下来,如果它主动踢他们(例如不发送保持活动消息),它也会记录下来。
已知数据
- 每当报告虚假断开连接并且我检查日志时,大多数时候我没有看到该玩家被服务器软件主动踢出,只看到连接已关闭。
- 有一个内部监控服务有一堆 localhost 连接到游戏服务器,就像玩家一样,它不会断开连接。
其他
像我们这样的网络游戏还有很多。他们如何处理这个问题? (除非问题出在服务器/数据中心,那么解决方案是显而易见的)
- 他们使用 UDP 吗?我知道动作游戏会,为了速度,但我认为 TCP 是正常的,例如在线扑克和其他慢速游戏? (这对我们没有帮助,我们的客户端软件是用 Flash 制作的,不支持 UDP)
- 是否可以进行一些 TCP 调整以使其更宽松?
- 或者他们是否也遇到了这些断开连接,只是以更透明的方式重新连接?
- 网络上是否有这方面的信息?
【问题讨论】:
-
+1 祝你好运;我讨厌调试网络。您是否知道有时客户端每隔几分钟就会更改一次 IP 地址?是的,事情变得如此可怕。寻求弹性重新连接。
-
我认为仅使用服务器端日志无法确定原因。可能会在客户端断开连接时记录客户端日志并要求您的客户端向您发送日志文件(通过报告问题按钮或其他方式)。
-
没错,没有通用的方法可以从服务器端找出导致客户断开连接的原因。您的 Java 应用程序在什么操作系统上运行,您通常同时拥有多少个连接?
-
@JohnD OS 是 CentOS Linux 5.5,我们有大约 400 个连接
-
可能是防火墙问题。看看stackoverflow.com/a/4541177/727201
标签: java testing tcp monitoring