我想弄清楚对#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();
}
如果有人可以向我指出一些资源,我可以在哪里挖掘更多关于此的细节,或者有人能解释这种行为,我真的很感激。