0

如果我的机器上运行着一台服务器,而其他网络上运行着几个客户端,那么测试它们之间的同步性的一些概念是什么?我怎么知道客户端何时不同步?
我对游戏设计领域的网络程序员如何做到这一点(或任何持续的网络交换应用程序)特别感兴趣,其中实时同步性通常是成功的重要方面。

我可以看到如何通过在不同机器上的并排比较在 LAN 上轻松实现这一点......但是一旦你将场景扩展到包括来自外国网络的客户端,我只是不确定如何在没有它的情况下完成用调试信息堵塞你的消息系统,因此有效地改变了同步性的产生方式没有通过网络传递调试信息。

那么人们有什么方法可以解决这个问题呢?
例如,他们是否只是简单地在本地网络上诱导/模拟延迟,然后再启动到外部网络,然后寄希望于最好的结果?我希望有一些更具体的解决方案,但这就是我在此期间正在做的事情......

4

1 回答 1

1

当您说同步时,我相信您是在谈论网络延迟。这意味着,本地网络上的客户端可能比该国另一端的客户端更快地获得其游戏信息。正确的?如果是这样,那么我相信您可以查找涵盖此类主题的书籍或论文,但我可以为您提供至少一种方法来检测这种延迟并提供一种管理它的方法。

为了检测延迟,您的服务器可以使用一种跟踪路由程序来确定数据到达每个客户端所需的时间。一个常见的 Linux 程序示例可以在这里找到http://linux.about.com/library/cmd/blcmdl8_traceroute.htm。在服务器处理客户端数据的同时,它还可以持续收集延迟统计数据并将数据提供给客户端。例如,服务器可以根据自己的网络延迟更新每个客户端,以及在游戏中互相玩的客户端组的最长延迟是多少。

然后,客户端可以使用延迟差异来确定他们应该何时处理从服务器接收到的数据。例如,服务器告诉客户端其网络延迟为 50 毫秒,其组的最大延迟为 300 毫秒。然后客户端知道在处理来自服务器的游戏数据之前要等待 250 毫秒。这样,每个客户端几乎同时处理来自服务器的游戏数据。

还有许多其他(可能更好)的方法来处理这种情况,但这应该会让你朝着正确的方向开始。

于 2013-04-05T04:05:52.410 回答