C#中的多个HTTP请求
我需要将大约200个HTTP请求并行发送到不同的服务器并获得响应。 我在C#中使用HttpWebRequest类。 但是,当并行处理请求时,我看不到好的时间增强。 例如,如果一个请求需要3秒来获得响应,2个请求并行 – 6秒,3个请求 – 8秒,4个请求 – 11秒……这不好,我希望应该有最好的时间,大约10秒200要求。 看起来只有2-3个请求并行执行,但是在创建WebRequest对象后立即启动超时。 我尝试设置DefaultConnectionLimit
和MaxServicePoints
值,但id没有帮助。 据我了解这些参数对并行的一个站点的请求数。 我需要不同网站的请求。
我用来测试的代码示例:
ArrayList a = new ArrayList(150); for (i = 50; i < 250; i++ ) { a.Add("http://207.242.7." + i.ToString() + "/"); } for (i = 0; i < a.Count; i++) { Thread t = new Thread(new ParameterizedThreadStart(performRequest)); t.Start(a[i]); } static void performRequest(object ip) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create((stirng)ip); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); }
Сan有人遇到过这样的问题吗? 谢谢你的任何建议。
而不是启动自己的线程尝试使用HttpWebRequest的异步方法,如HttpWebRequest.BeginGetResponse和HttpWebRequest.BeginGetRequestStream 。
建议允许的TCP连接数有限制,但可以增加限制
请使用异步Web请求。
编辑: http : //msdn.microsoft.com/en-us/library/86wf6409(VS.71).aspx
你可以试试这个:
try { List uris = new List (); uris.Add(new Uri("http://www.google.fr")); uris.Add(new Uri("http://www.bing.com")); Parallel.ForEach(uris, u => { WebRequest webR = HttpWebRequest.Create(u); HttpWebResponse webResponse = webR.GetResponse() as HttpWebResponse; }); } catch (AggregateException exc) { exc.InnerExceptions.ToList().ForEach(e => { Console.WriteLine(e.Message); }); }
这是发送请求的android应用程序的代码。 我们如何使用像params.add这样的上层代码(new BasicNameValuePair(“key”,“value”);
HttpPost request = new HttpPost();
List params = new ArrayList();
params.add(new BasicNameValuePair(“key”,“value”); //我们如何以这种格式格式给出值
post.setEntity(new UrlEncodedFormEntity(params));
httpClient.execute(请求);