[转]关于HTTP服务器每个客户端2个连接的限制

这两天猫在家里搞一个多线程的断点续传得C#程序,发现同时只能开2个线程下载,其他的线程一律要等待,这样就导致下载大文件时其他线程经常超时,郁闷好久。今天回公司无意中发现了一个帖子,终于真相大白了,
      现摘录如下:

      这几天在做IIS 6上Web Service (WSE 2.0)的性能测试。在这个过程中陆续发现和解决了一些问题。
其中有一个问题比较有意思。我和项目组的同事发现,不论我们用C#写的模拟客户端用多少并发量来连接Web Service,服务器端监测到的并发连接数(性能记数器中的Web Service\Current Connections)总是每客户端最高2个。这使得我们无法查看服务器在大并发量下的真切反应。
      那么为什么服务器会对每客户端做出最高2个并发量的限制呢?
      通过查找资料,我找到了问题的根源。原来,在HTTP 1.1 Spec中针对Persistent Connections提出了这样的Practical considerations:
      Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion.
      以上内容表明,为了提高HTTP响应时间以及避免产生网络堵塞,HTTP连接中的客户端不应该与服务器端建立超过2个的HTTP连接。如果有更多的请求需要,那么这些请求将被pipeline到这两个HTTP连接之中,并以异步的方式传送给服务器端。举个例子:有上百辆汽车(requests)想从天津开往北京,但是天津与北京之间最多只允许修建两条公路(HTTP connection),因此这些汽车要想从天津驶往北京的话,就只能走这两条公路。
      但是,有时的确需要突破这样的限制。比如我一开始提到的性能测试,我需要用尽可能少的客户端程序来模拟尽可能多的用户访问,而不能为了模拟1000个并发量同时使用500台机器来测。那么应该怎样通过一个测试应用程序来产生指定的并发数量呢?
      不难看出,为了提高单一测试应用程序所产生的并发量,就应该增加两个指标:网络客户端数量和单一客户端的HTTP连接数量。就我所知,可以通过以下两种方法来分别提高这两个指标。

方法一:使用AppDomain
      在. NET中,一个AppDomain就被视为网络连接中的一个客户端,因此如果希望用一个测试应用程序模拟多个客户端,那么只须创建多个AppDomain 即可。需要注意的是,对于每一个AppDomain,最高2个的连接限额仍然存在,不同之处只是我们可以使用一个测试应用程序发送超过2个的并发请求了(现在为了模拟1000个并发量就不需要找500台测试机器了)。请看下面的代码:

AppDomain appDomain = AppDomain.CreateDomain("");
appDomain.ExecuteAssembly(@"TestClient.exe");
AppDomain.Unload(appDomain);

      在这里,我通过调用AppDomain的静态方法CreateDomain创建了一个新的应用程序域,并要求该应用程序域执行一个应用程序 TestClient.exe。该应用程序将负责向服务器发送请求(最多只能建立两个连接)。你可以通过多线程的方式来驱动上述代码,使得大量应用程序域在近乎相同的时间里被创建,从而就可以模拟指定数量的客户端,并产生所希望的并发访问量。

方法二:使用配置文件
      除了增加客户端数量以外,我们还可以增加单一客户端所能建立的HTTP连接数量。在.NET中实现这一目标非常容易,只需要在客户端(没错,是客户端!)的配置文件中增加以下几行即可:

<system.net>
 <connectionManagement>
  <add address="*" maxconnection="100"/>
 </connectionManagement>
</system.net>

      其中,connectionManagement节点负责指定客户端与某一网络主机之间所能建立的最高连接数量。它在Machine.config文件中的默认取值就是2。我们完全可以在应用程序级的配置文件中对这一限额做出更改。address属性表明该连接限额针对的是哪一个网络地址,*表明所有的网络主机;如果写成address="www.google.com"就表明后面的maxconnection只适用于对google的访问。
好了,现在就可以根据自己的需要来更改配置了。如果你把maxconnection的取值改成了1000,那么你的测试应用程序与服务器之间所能建立的最高连接数量就是测试用应用程序域的数量 * 1000,测吧!

方法三:

ServicePointManager.DefaultConnectionLimit = 1000;

方法四:

protected override WebRequest GetWebRequest(Uri uri) {
    HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(uri);
    ServicePoint currentServicePoint = req.ServicePoint;
    currentServicePoint.ConnectionLimit = 1000;
   return req;
}

转载于:https://www.cnblogs.com/fungchou/archive/2008/06/26/1230596.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2014_guangzhou_onsite

5127 Dogs Candies 链表&#xff0c;暴力 5128 The E-pang Palace 计算几何水题&#xff0c;求不相交两个矩形的最大面积 5129 Yong Zhengs Death 5130 Signal Interference 计算圆与多边形的交&#xff0c;计算几何模板题目 5131 Song Jian…

[ SAP ]MM Valuation System

1、除了工厂&#xff0c;另一个会决定不同的会计科目的因素是物料本身&#xff0c;所以我们在物料主数据中会需要定义一个“评估类”参数&#xff0c;通过“评估类”来决定会计科目。 2、创建/更改/删除物料主数据&#xff1a;后勤-》物料管理-》物料主数据-》物料 MM01创建物…

2014_shanghai_visit

5090 Game with Pearls 签到题目&#xff0c;直接模拟即可。 5091 Beam Cannon 矩形覆盖的最大点数&#xff0c;离散化扫描线线段树。 5092 Seam Carving 记录路径的DAG 5093 Battle ships 行列建边&#xff0c;二分图匹配 5094 Maze …

从MySQL导入导出大量数据的程序实现方法

大家一定使用过 phpmyadmin 里面的数据库导入&#xff0c;导出功能&#xff0c;非常方便。但是在实际应用中&#xff0c;我发现如下几个问题&#xff1a; 1 数据库超过一定尺寸&#xff0c;比如6M 这时使用导出一般没问题&#xff0c;可以正确的保存到本机硬盘上面&#xff0c…

2013_chengdu_visit

4716 A Computer Graphics Problem 签到题目&#xff0c;模拟。 4717 The Moving Points 求n个点的最大距离最小值&#xff0c;三分时间即可 4718 The LCIS on the Tree LCT动态树 4719 Oh My Holy FFF 4720 Naive and Silly M…

JavaScript: Cookie 详解、实例与应用

Cookie&#xff08;也&#xff09;是JavaScript中的一种机制&#xff0c;可以实现严格的跨页面全局变量的要求。 Cookie是存于用户硬盘的一个文件&#xff0c;这个文件通常对应于一个域名&#xff0c;当浏览器再次访问这个域名时&#xff0c;便使这个cookie可用。因此&#xff…

2013_warmup

感觉题目质量很差的一套&#xff0c;可能是不正式的原因。 4706 Childrens Day 签到题。 4707 Pet 签到题目&#xff0c;BFS或者DFS; 4708 Rotation Lock Puzzle 分析模拟题 4709 Herding 计算几何水题。 4710 Balls R…

cs模式下,显示网络图片一例

由于在cs模式中 显示图片很简单picturebox1.imageimage.fromfile(filename) 但是filename不能是url&#xff0c;所以不能显示网络图片&#xff0c;怎么办呢&#xff1f;其实 .net 为我们准备了一套很方便的方法。在.net中&#xff0c;网上的资源&#xff08;图片&#xff0c;动…

2013_chengdu_online

4728 A Game in the Hospital 4729 An Easy Problem for Elfness 4730 We Love MOE Girls 签到题目 4731 Minimum palindrome 规律构造 4732 Round Table 4733 G(x) 枚举dp 4734 F(x) 数位dp基础题目。…

【Vegas2008】7月19日-凉粉的做法

1&#xff09; 准备淀粉&#xff0c;1个量杯。2&#xff09; 盛出1杯淀粉到小锅里&#xff0c;倒6份凉水到小锅里。淀粉和水的比例是1&#xff1a;6&#xff0c;用什么工具来量并不重要&#xff0c;把比例弄好了就行。另外&#xff0c;关于比例&#xff0c;有人喜欢1&#xff1…

2013_hangzhou_online

4738 Caocaos Bridges 求无向图的桥中最小的那个&#xff0c;tarjan 4739 Zhuge Liangs Mines 状态压缩暴力 4740 The Donkey of Gui Zhou 求两个点在图上的相遇点&#xff0c;模拟dfs 4741 Save Labman No.004 计算几何&#xff0c;平面上的两条…

骑行封龙山

最近受不了luoluo和尚的鄙视加刺激(车子比我晚买好几个月&#xff0c;骑行路程快1000公里了-_-),中午心血来潮就随便选了个路线&#xff0c;跟刘兄一起骑行封龙山去了&#xff0c;本来预订的正常路程从二环到封龙山大概17公里&#xff0c;来回34&#xff0c;偏偏被我这天才路痴…

2013_nanjing_online

4748 Area 4749 Parade Show 贪心模式匹配/rk-hash 4750 Count The Pairs 最小瓶颈生成树&#xff0c;统计瓶颈>c的个数。 4751 Divide Groups BFS/DFS搜索/划分成二分图 4752 Polygon 简单计算几何&#xff0c;线和多边形的交辛…

SQL Server 2005异地备份

前几天做了数据库镜像&#xff0c;现在也要来做做数据库的备份。本方案采用备份至本地然后copy到文件服务器的方法。 SQL server 2005打了sp2的补丁后好像存储过程xp_cmdshell是不能直接用的 显示高级选项&#xff08;仅需执行一次&#xff09; EXEC sp_configure show advan…

2013_changchun_online

4759 Poker Shuffle 二进制规律枚举 4760 Good Firewall 稍加变化tire树 4761 Sky 4762 Cut the Cake 概率题目&#xff0c;yy&#xff0c;公式。 4763 Theme Section 简单kmp 4764 Stone 威做福博弈&a…

从控件开发的角度看几个editor控件,Freetextbox,radtoolbar,abouteditor,cuteeditor

今天控件的开发有了很大进展&#xff0c;写些东西。在开发之前&#xff0c;我看了几个控件的源代码&#xff0c;如Freetextbox,radtoolbr,abouteditor以及cuteeditor。今天凭会议总结一下他们的特点&#xff0c;能记下来的都是他们很独特的地方。 首先是FreeTextbox 此控件是生…

2014_hangzhou_onsite

4770 Lights Against Dudely 状态压缩枚举 4771 Stealing Harry Potters Precious 签到&#xff0c;压缩后直接BFS 4772 Zhuge Liangs Password 签到题目&#xff0c;模拟矩阵旋转即可 4773 Problem of Apollonius 4774 Random Number Generato…

C#与VB.NET代码互相转换在线工具

实用的在线工具---把 C# 代码转换成 VB.NET 代码在线工具--把C#代码转换成VB.NET代码有不少朋友在网上找资料时经常会遇到想要VB.NET的代码&#xff0c;但却只有C#的代码。 自己改又改不大来&#xff01; 本人不经意发现有一个在线工具&#xff0c;使用方便。 支持&#xff1a;…

Codeforce_732

A Buy a Shovel水题&#xff0c;问买鞋子的个数&#xff0c;直接暴力。 #include <bits/stdc.h> using namespace std;int main() {int k,r,ans0;scanf("%d%d",&k,&r);for (int i1;i<10000;i){if (i*k%100||i*k%10r){ansi;break;}}printf("…

苹果电脑可以装windows系统吗_不只是桌面,这个 Windows 皮肤可以帮你全局美化 Windows 系统

追求个性化是个永恒不变的需求&#xff0c;而在主题这件事情上&#xff0c;和 Windows XP 那个百花齐放的时代相比&#xff0c;我们在 Windows 10 下能够享受到的官方主题大多都只是换换壁纸、改改配色这么简单。而在千篇一律的官方主题之外&#xff0c;美化社区的 Windows 10 …