繁体   English   中英

如何使用HttpWebRequest类获取真正的多响应

[英]How to use HttpWebRequest class for get real multiresponse

HttpWebRequest类存在一些逻辑问题。

我从System.Net命名空间使用HttpWebRequest类,并且在执行此操作时:

while(true)
{
    HttpWebRequest request = WebRequest.Create("http://somesite.com/") as HttpWebRequest;
    HttpWebResponse responce = request.GetResponse() as HttpWebResponse;
}

我以超过一秒的时间间隔一个接一个地响应,但是我认为我的Internet连接可以更快地工作,因为接收到的数据非常小。 然后我尝试一下:

while(true)
{
    HttpWebRequest request = WebRequest.Create("http://google.com/") as HttpWebRequest;
    HttpWebResponse response = request.BeginGetResponse(EndReceive, obj);
}

internal void EndReceive(IAsyncResult ar)
{
    obj.Response = obj.Request.EndGetResponse(ar) as HttpWebResponse;
}

而且我得到的速度增加非常小,大约是10%至30%,但是我使用了异步请求,而不是向我发送到服务器5个请求,为什么速度没有增加超过100%? 如果服务器不能同时处理来自一个ip的多个请求是可以的...但是当我使用代码运行10个控制台应用程序时:

void SendRequest()
{
    HttpWebRequest request = WebRequest.Create("http://google.com/") as HttpWebRequest;
    HttpWebResponse responce = request.BeginGetResponse(EndReceive, obj);
}

void EndReceive(IAsyncResult ar)
{
    obj.Response = obj.Request.EndGetResponse(ar) as HttpWebResponse;
}

我的速度提高了4到8倍, HttpWebRequest类是否有问题? 为什么我不能通过一个应用程序获得这么快的速度,但是却有许多异步请求?

我强烈怀疑您基本上是受内置连接池限制的,它将限制单个进程(或可能是AppDomain)对给定主机发出的请求数。 如果要更改可以向单个主机发出的并发请求数,请使用app.config中的<connectionManagement>元素。

顺便说一句,在使用响应时,您应该有一个using语句,否则您将无法正确处理它...这可能会导致连接池本身出现可怕的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM