调试网络应用程序和测试同步性

Debugging network applications and testing for synchronicity?

本文关键字:测试 同步性 应用程序 网络 调试      更新时间:2023-10-16

如果我的机器上运行一个服务器,而几个客户端在其他网络上运行,那么测试它们之间的同步性的一些概念是什么?我怎么知道客户端不同步了?
我特别感兴趣的是游戏设计领域的网络程序员是如何做到这一点的(或者只是任何连续的网络交换应用),其中实时同步性通常是成功的关键因素。我可以看到,通过在不同的机器上并行比较,如何在局域网上轻松实现这一点……但是,一旦您将场景扩展到包括来自国外网络的客户端,我只是不确定如何在不堵塞您的消息传递系统的情况下完成调试信息,从而有效地改变同步将导致而不调试信息通过网络传递的方式。

那么,人们有哪些方法来回避这个问题呢?
例如,他们只是在启动到外部网络之前诱导/模拟本地网络上的延迟,然后期待最好的结果吗?我希望有一些更具体的解决方案,但这是我正在做的与此同时…

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

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

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

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