0

我试图弄清楚对“GetRequestStream”的调用是否有限制。

为了测试这一点,我创建了一个负载测试,其中包含 10 个代理和 1 个控制器,所有这些都试图进行 post call(对象大小 10kb)和 10 个用户计数。(下面的代码)。我没有调用“GetResponse()”来查看是否可以对 GetRequestStream 进行大量调用。

但实际发生的情况是,即使使用所有这些代理,负载测试也没有超过每秒 85 到 90 个请求,而争论点是代码“使用 (Stream requestStream = request.GetRequestStream())”中的这一行。

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

基于较早的 SO 帖子HttpWebRequest.GetRequestStream :它的作用是什么?

它提到对 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();
}

如果有人可以向我指出一些资源,我可以在其中挖掘更多关于此的细节,或者如果有人可以解释这种行为,我将不胜感激。

4

1 回答 1

0

根据 http 1.1 RFC,HttpWebRequest 具有从客户端到主机的默认连接限制为两个 - 这可能会导致延迟下降超过两个并发用户。可以通过客户端进程的app.config来改变,见这里这里

于 2013-04-16T17:18:17.180 回答