TCP / IP耗尽发送2000 req / s

时间:2018-01-07 20:52:25

标签: c# .net-core windows-server-2012 tcp-ip

我有一个应用程序需要每秒发送2000个http获取请求,但是当我这样做时,客户端应用程序在一段时间后无法获得响应。当我检查tcp ip ports时,我看到很多tcp ip ports是TIME WAIT状态。

对于一台服务器来说,每秒2000 reqs太多了?有没有最好的做法来运行这样的应用程序?

我尝试更改服务器配置,但没有太多帮助。 https://msdn.microsoft.com/en-us/library/aa560610(v=bts.20).aspx

我在测试上面的场景时运行下面的代码,

    var client = new RestClient("http://localhost:5000/")
    {
        Proxy = null
    };
    var counter = 0;
    while (true)
    {

        var request = new RestRequest("api/values", Method.GET) {Timeout = 5000};
        client.ExecuteAsync(request, response =>
        {
            Console.WriteLine(response.StatusCode + "=> " + counter++);
        });

    }

1 个答案:

答案 0 :(得分:1)

HTTP的问题是它真的是为1个查询和1个响应而设计的(是的,我知道有办法让套接字保持打开状态)。

更好的解决方案是向服务器打开1个标准TCP / IP套接字,并在此单个套接字上发送多个查询(并获取响应)。

现在每秒2000次查询不是很多,所以如果您的代码有效,任何体面的服务器硬件都能够跟上。