在Windows中模拟TCP套接字的慢速

我正在构build一个使用TCP套接字进行通信的应用程序。 我想testing它在慢速条件下的performance。

网站上也有类似的问题,但据我所知,他们处理HTTPstream量,或者是关于Linux。 我的stream量不是HTTP,只是普通的TCP套接字,操作系统是Windows

我尝试使用调制解调器的调制解调器速度的设置,但它没有工作,它似乎只适用于HTTP连接。

尽管您可能想投资大量的单元测试,但您可以使用VMWare Workstation模拟各种网络条件:

网络设置屏幕

你将不得不安装一个虚拟机进行测试,建立桥接网络(让vm访问你真实的网络)并把你的代码上传到vm。

之后,你可以开始改变设置,看看你的应用程序如何执行。

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

我想你在这里采取了错误的做法。

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

你的代码必须处理“慢”链接的东西只是你应该处理的东西,包括:

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

总之,通过在一个模拟的慢速网络上运行你的客户端和服务器,任何事情都不能通过一套体面的单元测试来实现,而你想在这样一个链接上进行测试的任何事情都可能影响你的任何连接链接的速度。