我们正在开发一款在线游戏,玩家可以使用持久的TCP连接与服务器进行通信。持续存在,其生命周期是玩家的会话,如果连接关闭,玩家将被抛出游戏(尽管客户端会尝试自动重新连接)。
现在,当然一切都在我们的办公室工作正常(连接到测试和现场服务器),但我们的客户报告说一些玩家断断续续(每隔几秒钟),并且他们自己也经历过(尽管他们的办公室在同一栋楼里。)
如何找出这些断开连接的原因?是因为:
该软件是用Java编写的。它会在玩家断开连接时记录,如果它主动踢它们(例如,不发送保持活动消息),它也会记录它。
还有许多像我们这样的在线游戏。他们如何处理这个问题? (除非问题出在服务器/数据中心,否则解决方案很明显)
答案 0 :(得分:1)
我会要求玩家允许您启用“匿名使用数据”,就像许多应用程序一样,定期将调试信息从他们的会话上传回给您。这就是你弄清楚这些情况的方法。
从那里,断开连接时你需要的是一个非常详细的日志。当发生断开连接时,捕获所引发的任何异常(并且不要忘记通过致电.getCause()
来记录cause - 根据需要拨打.getCause()
的电话,直到你'我们一直记录回根本原因),以及将客户端日志与服务器端日志匹配所需的任何相关数据。您可能需要的信息包括会话ID,游戏ID,时间戳等。只要想一想,“我认为我需要哪些信息来解决这个问题,假设我已经了解了连接的两个方面?”这就是要求用户上传使用情况和调试数据最终会得到的结果。
从那里你应该能够找出至少一些你可以控制它的情况 - 也就是说,你可以在哪里改变你的客户端/服务器代码以减轻一些问题。在某些情况下,如果问题是客户端的配置或故障设备(或者可能是您之间无法控制的设备之一),您将不得不依赖强大的重新连接。
您永远不会将断开连接减少到零,但是在您看到足够多的情况后,此信息应该可以帮助您减少断开与单独控制之外的情况的连接,此时您的力量可以变形网络将最终结束,您将尽可能接近具有网络可靠性的“最佳案例场景”。