C# 延迟传入网络连接

C# 延迟传入网络连接,c#,.net,testing,networking,C#,.net,Testing,Networking,我有一个在特定端口侦听的服务器应用程序Foo和一个连接到Foo的客户端应用程序条(两者都是.NET应用程序) 一切正常。到目前为止还好吗 但是,当连接速度变慢或需要很长时间才能收到Foo响应时,会发生什么情况呢?我必须测试一下 我的问题是,我如何模拟这样的减速 一般来说问题不大(有一些免费的工具),但是Foo和Bar都是在生产机器上运行的(是的,有一些是在生产机器上开发的。我知道,这很糟糕,但相信我,这不是我的决定)。所以我不能仅仅使用一个工具来限制网络适配器的整个带宽 是否有一个工具可以限制带

我有一个在特定端口侦听的服务器应用程序Foo和一个连接到Foo的客户端应用程序条(两者都是.NET应用程序)

一切正常。到目前为止还好吗

但是,当连接速度变慢或需要很长时间才能收到Foo响应时,会发生什么情况呢?我必须测试一下

我的问题是,我如何模拟这样的减速

一般来说问题不大(有一些免费的工具),但是Foo和Bar都是在生产机器上运行的(是的,有一些是在生产机器上开发的。我知道,这很糟糕,但相信我,这不是我的决定)。所以我不能仅仅使用一个工具来限制网络适配器的整个带宽


是否有一个工具可以限制带宽或延迟特定端口的连接?有没有可能在.NET/C中实现这一点?这样我就可以编写适当的单元/集成测试了

您可以在代码中加入sleep()命令来降低速度,但我认为这不是一个好主意


老实说,这取决于您的网络设置,我的建议是执行一些基于QOS的流量整形或类似操作。

您可以在代码中加入sleep()命令来降低速度,但我认为这不是一个好主意


老实说,这实际上取决于您的网络设置,我的建议是进行一些基于QOS的流量整形或类似操作。

这个问题基于一个预先存在的假设,即应用程序的典型使用将通过慢速链路。这是一个有效的假设吗

也许你应该问以下问题:

  • 这是一个TCP连接,打算在异常缓慢的介质(如拨号)上运行吗

  • 您能否量化应用程序成功所需的最小可接受吞吐量

  • 这种连接是否具有高度的交互性(在这种情况下,延迟成为一个问题,而不仅仅是带宽)

  • 是的,我在质疑你问题中隐含的假设

    假设您已经回答了上述问题,并且因此对应用程序的指标和成功标准非常满意,并且您仍然认为需要某种压力测试来证明这一点,那么还有两种方法

  • 使用工具模拟“慢速连接”。我知道Linux流量控制工具非常先进,可以模拟任何东西(请参阅)——如果您真的想变得灵活,那么将Linux虚拟机设置为路由器,并将PC的默认路由设置为路由器。可能有无数功能较少的Windows工具可以做类似的事情

  • 编写一个自定义代理应用程序,该应用程序接受TCP连接,并使用自定义
    线程进行“传递”。根据您选择的某些配置文件进行睡眠。这可以合理地模拟脆弱的TCP连接,但有点不科学(TCP后退算法有点毛茸茸,难以精确模拟)


  • 这个问题基于一个预先存在的假设,即应用程序的典型使用将通过慢速链接进行。这是一个有效的假设吗

    也许你应该问以下问题:

  • 这是一个TCP连接,打算在异常缓慢的介质(如拨号)上运行吗

  • 您能否量化应用程序成功所需的最小可接受吞吐量

  • 这种连接是否具有高度的交互性(在这种情况下,延迟成为一个问题,而不仅仅是带宽)

  • 是的,我在质疑你问题中隐含的假设

    假设您已经回答了上述问题,并且因此对应用程序的指标和成功标准非常满意,并且您仍然认为需要某种压力测试来证明这一点,那么还有两种方法

  • 使用工具模拟“慢速连接”。我知道Linux流量控制工具非常先进,可以模拟任何东西(请参阅)——如果您真的想变得灵活,那么将Linux虚拟机设置为路由器,并将PC的默认路由设置为路由器。可能有无数功能较少的Windows工具可以做类似的事情

  • 编写一个自定义代理应用程序,该应用程序接受TCP连接,并使用自定义
    线程进行“传递”。根据您选择的某些配置文件进行睡眠。这可以合理地模拟脆弱的TCP连接,但有点不科学(TCP后退算法有点毛茸茸,难以精确模拟)


  • 我用过测试这种东西。有些工具甚至可以让你模拟数据包丢失。

    我曾用它来测试这类东西。有些工具甚至可以让你模拟数据包丢失。

    在我的工作中,我有时不得不在慢速/不可靠的链路上测试传输代码。我发现最好的免费方式是在FreeBSD中使用dummynet模块。我设置了一些虚拟机,它们之间有一个freebsd框作为透明的桥梁。我使用dummynet来搜索通过网桥的流量,以模拟我想要的任何延迟和数据包丢失


    不久前,我在我的博客上写了一篇文章,标题是。在VMWare Workstation或其他虚拟化产品中,只要您可以控制网络接口的操作方式,它也应该是可行的。

    在我的工作中,有时我必须通过缓慢/不可靠的链接测试传输代码。我发现最好的免费方式是在FreeBSD中使用dummynet模块。我设置了一些虚拟机,它们之间有一个freebsd框作为透明的桥梁。我使用dummynet来搜索通过网桥的流量,以模拟我需要的延迟和数据包丢失