TCP/IP耗尽送2000req/s

TCP/IP Exhaustion Sending 2000 req/s

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

那么每秒 2000 个请求对于一个服务器来说太多了吗? 运行 这样的应用程序有什么最佳实践吗?

我尝试更改服务器配置,但没有太大帮助。 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++);
        });

    }

HTTP 的问题在于它实际上是为 1 个查询和 1 个响应而设计的(是的,我知道有一些方法可以使套接字保持打开状态)。

解决您的问题的更好方法是打开 1 个标准 TCP/IP 套接字到服务器并通过这个套接字发送多个查询(并获得响应)。

如今每秒 2000 次查询并不算多,因此只要您的代码高效,任何像样的服务器硬件都能够跟上。