我有一个应用程序需要每秒发送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++);
});
}
答案 0 :(得分:1)
HTTP的问题是它真的是为1个查询和1个响应而设计的(是的,我知道有办法让套接字保持打开状态)。
更好的解决方案是向服务器打开1个标准TCP / IP套接字,并在此单个套接字上发送多个查询(并获取响应)。
现在每秒2000次查询不是很多,所以如果您的代码有效,任何体面的服务器硬件都能够跟上。