如何为测试目的模拟不良的互联网连接?


105

我正在开发在线多人游戏。当我在局域网上对其进行测试时,它可以很好地工作,但是在发布它之前,我想测试一下对于与服务器连接不佳的用户的用户体验。在本地环境中,如何模拟具有高延迟,低带宽,抖动和偶发数据包丢失的不良Internet连接?


69
发送给我进行测试!默认情况下,我所在国家/地区的连接非常恐怖。
斯蒂芬,

7
一个值得称赞的目标。我希望发布的工作室也能做到这一点。史诗般的游戏,我在看着你。
Gusdor

7
在附近找到一个使用Comcast ...的朋友
WernerCD

12
模拟不良的互联网连接包含当前答案以及更多内容。
MichaelHouse

2
我马上想到了这个其他最近SE的问题:superuser.com/questions/637594/...
帕特里克·中号

Answers:


63

我认为Dummynet是您想要的。Dummynet是一种网络仿真工具,可以模拟带宽限制,延迟,数据包丢失等。您可以轻松选择要拦截的流量并配置限制,例如,将所有传入的TCP流量限制为2Mbit / s

ipfw add pipe 2 in proto tcp
ipfw pipe 2 config bw 2Mbit/s

您会看到流量选择是由已知的ipfw防火墙完成的,并且管道提供了限制功能。

它可用于FreeBSD,Linux和Windows。


与Windows回送适配器兼容吗?
Andriy Tylychko

回答我自己的问题,不,即使我禁用了已签名的驱动程序增强功能,它也无法在Windows 8.1上运行
Andriy Tylychko 2015年

@AndyT是否找到了适用于环回的功能?找到确实能避免损失并能与环回配合使用的东西似乎很困难。
AaronLS '16

@AaronLS:请在这里看到另一个答案:gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko '16

33

网络链接调节器

如果您使用的是Mac,则可以使用Network Link Conditioner。

网络链接调节器首选项窗格

您可以模拟各种情况下的Internet连接中断,包括Edge和3G。

此外,您可以使用自己的设置来创建自己的配置文件:

网络链接调节器自定义配置文件

它可以在Xcode中免费下载(转到Xcode→打开开发人员工具→更多开发人员工具…,然后下载Xcode硬件IO工具)。


我喜欢这个工具,但是我需要一些可以用于自动化测试的工具。有谁知道是否为此使用命令行界面?
Erik B

15

如果您使用的是Linux,则可以使用netem模拟网络的所有可能问题,例如高延迟,低带宽,数据包丢失等。

Windows有一个名为NetLimiter的选项,但我没有使用过,因此无法担保。

刚刚找到了一个名为SlowlyApp的Mac App 。


1
-1和其他答案一样。这只是链接。请更新答案,以包括对应用程序功能及其执行方式的描述。
MichaelHouse

8
@ Byte56:这些应用程序的作用是模拟缓慢和/或不可靠的网络连接,就像问题所要求的那样。我敢肯定,怎么他们这样做是本站的范围之内。我想这是对所问问题的完美回答;如果有问题,那是问题,而不是答案。
Ilmari Karonen 2013年

1
从技术上讲,该问题询问“如何模拟不良的Internet连接”。它不要求应用程序执行此操作。但是,是的,我认为这个问题不在本网站的讨论范围之内。
MichaelHouse


7

在本地环境中,如何模拟具有高延迟,低带宽,抖动和偶发数据包丢失的不良Internet连接?

如果您使用的是Windows,则可以尝试SoftPerfect Connection Emulator。它基本上是一种驱动程序,可以将其自身插入到应用程序和所选NIC的网络层(类似于Wireshark / WinPCAP)之间,并且可以模拟有限的带宽,延迟,数据包丢失等。用户界面简单明了。

它是一种商业产品,但是试用版可以让您进行30秒的“干扰”爆发,这足以让您判断此工具是否满足您的要求。

另一个跨平台的选项是DummyNet,它的行为方式相似(通过ipfw),但使用起来不太方便。

我想测试一下与服务器连接不佳的用户的用户体验。

我认为问题的这一部分可以重申为“我该如何处理应用程序中的网络延迟?” 一种常用且有效的技术是航位推算。链接的文章比我能更好地解释它,但是基本思想是,您的客户可以“模拟”每个实体的位置以及算法应执行的操作。每当实体偏离此算法(即玩家输入,服务器端事件等)时,它都会向每个客户端发送更新。


5

我已经有一段时间没有使用它了,但是我已经使用Charles对此进行了测试。它是一个具有各种网络诊断工具的应用程序,其中包括模拟您提到的问题:“不良的Internet连接,具有高延迟,低带宽,抖动和偶发的数据包丢失”


1
乍一看,看起来Charles是一种HTTP代理,因此它无法塑造普通的TCP或UDP流量。我想念什么吗?
vbo 2014年

甚至是+ 5,wft?
MarianPaździoch2015年

er我不确定“塑造普通TCP或UDP流量”的含义是什么,但是我已经使用此工具来精确地模拟OP的要求,模拟了不良的Internet连接。
2015年

1
@jhocking他的意思是它仅适用于HTTP通信。许多实时游戏使用TCP或UDP。
AaronLS '16

0

如果您精通Fiddler,并且对HTTP / 1感兴趣,那么可以编写此脚本。

Fiddler不支持HTTP / 2,对其进行拦截将导致所有HTTP流量降级为HTTP / 1。


有趣。您能否提供更多详细信息?也许一些示例脚本?
菲利普

@Philipp此答案(stackoverflow.com/a/47401557/442351)提供了一个示例。
BanksySan

它仅支持http吗?甚至没有websockets?那么我认为它在游戏开发中没有多大用处。如果您担心延迟,那么您一开始就不会使用http。但是还是感谢您提及它。
菲利普

@Philipp确实支持WebSockets,仅支持HTTP / 2。但是,您应该看一下HTTP / 2,它与HTTP / 1完全不同,不再有任何行头阻塞,不再有多个握手,不再有重复的标头和/或cookie。
BanksySan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.