繁体   English   中英

模拟 Windows 中 TCP 套接字的慢速

[英]Simulate slow speed for TCP sockets in Windows

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

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

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

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

网络设置屏幕

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM