2013-09-30 39 views
1

我在做一个多人游戏,我常常想,以测试它是否完美的作品全球网络上,因为有时它只是本地工作,所以,我怎么可以做你的客户端服务器程序,没有送我的客户朋友来测试它。如何测试

+0

你想在全球网络上测试一些东西,而不用在全球网络上测试它? – Dukeling

+0

仅供参考,本地定义?如果你使用本地主机,你什么都不测试 - 如果你使用主机游戏机器的IP地址,那你就是个好主意。你甚至可以在同一台机器上进行测试。但是,至少在本地网络中使用两台机器。 – KevinDTimm

回答

0

如果你想测试它的“全球网络” - 你必须测试这种方式。有很多事情可能会出错,这在本地网络上不是问题。只是把我的头顶部

  1. 延迟(对游戏很重要)
  2. NAT(取决于你的游戏架构问题的常见原因 - 更何况,如果P2P)
  3. 安全
  4. 连接错误( WIFI/3G间歇性丧失)
0

有迹象表明,往往是微妙的不同,当你谈论在互联网上,而不是localhost或本地网络运行的网络的许多方面。

  • 所有的延迟方式都可能发生,这可能会在代码中抛出一些糟糕的假设。
  • TCP流可以通过TCP的流控制受到影响(当TCP窗口填补了发送方将停止发送和事实向你(或者,如果你正在使用异步API)的没有举报,)。
  • TCP读取返回本地主机上的“完整消息”,并且您自己的网络可能开始返回消息片断。
  • UDP数据报可能会丢失,永远不会到达或可能以多次或按任意顺序到达。

所以你认为你需要测试你的代码,以处理这些极少出现在自己的网络上的边缘情况。您也认为仅仅将客户端发送给朋友或在远程机器上运行客户端是不够的。

一种方法是建立一个专用的测试客户端,发送已知的游戏,并检查它得到期望的响应(如何努力,这是取决于你的协议,您的游戏)。一旦你有了这些工作,你就可以让测试客户有意识地发送数据,以便测试上述项目。所以,如果你使用的是UDP,你可能会在你的测试客户端中放置一些代码,这样它有时根本就不用费力发送一个UDP数据报。客户应该认为它发送了它。网络层只是抛弃它。这测试你的UDP协议的缺失数据报。然后多次发送一些数据报,然后发送一些无序序列等。对于TCP添加延迟,将逻辑“消息”分解为单独的网络发送,它们之间有大的延迟;理想情况下,将每个不同的消息类型作为单个字节序列发送,以检查服务器的“消息累积代码”是否正常工作。

一旦你做到了这一点,你需要做同样为您的客户端代码,或许是增加一个“模糊”选项,您的服务器的网络代码做同样的事......

我个人倾向于试着退后一步,在专门的“单元测试”中尽可能地做到这一点(我知道有些人会说这些不是单元测试,只要把它们写成你喜欢的名称就可以了)。这些测试使用真正的网络(与测试创建的虚拟服务器/客户端交谈)来锻炼您的网络层,并验证可怕的边缘情况。