3

我正在构建一个使用 TCP 套接字进行通信的应用程序。我想测试它在低速条件下的表现。

网站上有类似的问题,但据我了解,它们处理 HTTP 流量,或者与 Linux 有关。我的流量不是 HTTP,只是普通的 TCP 套接字,操作系统是 Windows。

我尝试使用提琴手的调制解调器速度设置,但它不起作用,它似乎只适用于 HTTP 连接。

4

3 回答 3

2

虽然您确实可能想投资于大量单元测试,但您可以使用VMWare Workstation模拟各种网络条件:

网络设置屏幕

您必须安装一个虚拟机进行测试,设置桥接网络(让 vm 访问您的真实网络)并将您的代码上传到 vm。

之后,您可以开始更改设置并查看应用程序的执行情况。

也可以使用NetLimiter ,但它的选项较少(在您的情况下,数据包丢失测试非常有趣,并且在 netlimiter 中不可用)。

于 2013-11-15T11:00:22.993 回答
2

有一个出色的 Windows 实用程序可以进行节流等等:

https://jagt.github.io/clumsy/

于 2020-04-21T13:28:47.637 回答
1

我认为你在这里采取了错误的方法。

您可以通过一些精心设计的单元测试来实现您需要的一切。慢速网络链接导致的所有事情都可以在受控条件下的单元测试环境中进行模拟。

您的代码必须处理以处理“慢”链接的事情只是您应该处理的事情,包括:

  • 正确处理碎片消息。您的所有网络读取代码都需要正确假设每次读取将返回 1 字节和读取缓冲区大小之间。你永远不应该假设你会得到完整的“消息”,因为 TCP 对你的消息概念一无所知。
  • TCP 流控制导致您的同步发送失败并出现某种形式的“稍后尝试”错误,或者您的异步发送成功并可能使用不受控制的资源数量(有关更多详细信息,请参见此处)。请注意,如果您的发送速度比接收方消耗的速度快,即使在“快速”链接上也可能发生这种情况。
  • 超时 - 同样,这不仅限于“慢”链接。您的所有超时处理代码都应该是健壮且经过测试的。您可能希望确保任何读取超时都基于任何读取完成,而不是在 x 时间内读取完整的消息。您可能会以较慢的速度获取数据,但是当您仍在获取数据时,链接仍然有效。
  • 连接失败 - 再次不是特定于“慢”链接的东西。您需要随时了解如何处理被重置的连接。

总之,通过在模拟的慢速网络上运行客户端和服务器,您无法通过一组体面的单元测试来实现任何目标,并且您想要在此类链接上测试的所有内容都可能影响您在任何链接上的任何连接链接速度。

于 2013-11-15T10:47:44.507 回答