HttpGetRequestStream的呼叫限制

时间:2013-04-05 22:53:08

标签: c# http post httpwebrequest

我想弄清楚对#34; GetRequestStream"的调用是否有限制。

为了测试这个,我创建了一个带有10个代理和1个控制器的负载测试,所有代理都试图进行一次调用(对象大小为10kb),用户数为10.(下面的代码)。我没有打电话给" GetResponse()"看看我是否可以对GetRequestStream进行大量调用。

但实际发生的事情是,即使是所有这些代理,负载测试也没有超过每秒85~90个请求,争用点就是代码中的这一行"使用(Stream requestStream = request.GetRequestStream())& #34 ;.

我将代理减少到2但结果相同。端点服务器是单个服务器盒。当我使用VIP(由后端的3台服务器支持)时,我得到了3倍的输出,即能够达到270 RPS。 当我再次将代理人增加到15对抗VIP时,平均值仍保持不变。所以我总结说在调用GetRequestStream

期间有一些共享资源在使用

基于之前的SO帖子HttpWebRequest.GetRequestStream : What it does?

它提到GetRequestStream的调用实际上阻塞了服务器端的某些资源,无论生成的post调用的数量如何,它只能提供如此多的请求。我曾经认为GetRequestStream不会进行任何调用,只是获取一个流并将对象写入流,当我们调用GetResponse()

时调用就会发生
HttpWebRequest request =
   (HttpWebRequest)HttpWebRequest.Create("http://some.existing.url");

request.Method = "POST";
request.ContentType = "text/xml";

Byte[] documentBytes = GetDocumentBytes ();


using (Stream requestStream = request.GetRequestStream())
{
   requestStream.Write(documentBytes, 0, documentBytes.Length);
   requestStream.Flush();
   requestStream.Close();
}

如果有人可以向我指出一些资源,我可以在哪里挖掘更多关于此的细节,或者有人能解释这种行为,我真的很感激。

1 个答案:

答案 0 :(得分:0)

根据http 1.1 RFC,HttpWebRequest从客户端到主机的默认连接限制为2 - 这可能导致延迟超过两个并发用户。可以通过客户端流程的app.config进行更改,请参阅herehere