日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Concurrent connection limit

發(fā)布時(shí)間:2023/12/9 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Concurrent connection limit 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這幾天在做IIS 6上Web Service (WSE 2.0)的性能測試。在這個(gè)過程中陸續(xù)發(fā)現(xiàn)和解決了一些問題。
其中有一個(gè)問題比較有意思。我和項(xiàng)目組的同事發(fā)現(xiàn),不論我們用C#寫的模擬客戶端用多少并發(fā)量來連接Web Service,服務(wù)器端監(jiān)測到的并發(fā)連接數(shù)(性能記數(shù)器中的Web Service\Current Connections)總是每客戶端最高2個(gè)。這使得我們無法查看服務(wù)器在大并發(fā)量下的真切反應(yīng)。
那么為什么服務(wù)器會對每客戶端做出最高2個(gè)并發(fā)量的限制呢?
通過查找資料,我找到了問題的根源。原來,在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.
以上內(nèi)容表明,為了提高HTTP響應(yīng)時(shí)間以及避免產(chǎn)生網(wǎng)絡(luò)堵塞,HTTP連接中的客戶端不應(yīng)該與服務(wù)器端建立超過2個(gè)的HTTP連接。如果有更多的請求需要,那么這些請求將被pipeline到這兩個(gè)HTTP連接之中,并以異步的方式傳送給服務(wù)器端。舉個(gè)例子:有上百輛汽車(requests)想從天津開往北京,但是天津與北京之間最多只允許修建兩條公路(HTTP connection),因此這些汽車要想從天津駛往北京的話,就只能走這兩條公路。
但是,有時(shí)的確需要突破這樣的限制。比如我一開始提到的性能測試,我需要用盡可能少的客戶端程序來模擬盡可能多的用戶訪問,而不能為了模擬1000個(gè)并發(fā)量同時(shí)使用500臺機(jī)器來測。那么應(yīng)該怎樣通過一個(gè)測試應(yīng)用程序來產(chǎn)生指定的并發(fā)數(shù)量呢?
不難看出,為了提高單一測試應(yīng)用程序所產(chǎn)生的并發(fā)量,就應(yīng)該增加兩個(gè)指標(biāo):網(wǎng)絡(luò)客戶端數(shù)量和單一客戶端的HTTP連接數(shù)量。就我所知,可以通過以下兩種方法來分別提高這兩個(gè)指標(biāo)。

方法一:使用AppDomain
在. NET中,一個(gè)AppDomain就被視為網(wǎng)絡(luò)連接中的一個(gè)客戶端,因此如果希望用一個(gè)測試應(yīng)用程序模擬多個(gè)客戶端,那么只須創(chuàng)建多個(gè)AppDomain 即可。需要注意的是,對于每一個(gè)AppDomain,最高2個(gè)的連接限額仍然存在,不同之處只是我們可以使用一個(gè)測試應(yīng)用程序發(fā)送超過2個(gè)的并發(fā)請求了(現(xiàn)在為了模擬1000個(gè)并發(fā)量就不需要找500臺測試機(jī)器了)。請看下面的代碼:


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

在這里,我通過調(diào)用AppDomain的靜態(tài)方法CreateDomain創(chuàng)建了一個(gè)新的應(yīng)用程序域,并要求該應(yīng)用程序域執(zhí)行一個(gè)應(yīng)用程序 TestClient.exe。該應(yīng)用程序?qū)⒇?fù)責(zé)向服務(wù)器發(fā)送請求(最多只能建立兩個(gè)連接)。你可以通過多線程的方式來驅(qū)動上述代碼,使得大量應(yīng)用程序域在近乎相同的時(shí)間里被創(chuàng)建,從而就可以模擬指定數(shù)量的客戶端,并產(chǎn)生所希望的并發(fā)訪問量。

方法二:使用配置文件
除了增加客戶端數(shù)量以外,我們還可以增加單一客戶端所能建立的HTTP連接數(shù)量。在.NET中實(shí)現(xiàn)這一目標(biāo)非常容易,只需要在客戶端(沒錯(cuò),是客戶端!)的配置文件中增加以下幾行即可:

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

其中,connectionManagement節(jié)點(diǎn)負(fù)責(zé)指定客戶端與某一網(wǎng)絡(luò)主機(jī)之間所能建立的最高連接數(shù)量。它在Machine.config文件中的默認(rèn)取值就是2。我們完全可以在應(yīng)用程序級的配置文件中對這一限額做出更改。address屬性表明該連接限額針對的是哪一個(gè)網(wǎng)絡(luò)地址,*表明所有的網(wǎng)絡(luò)主機(jī);如果寫成address="
www.google.com"就表明后面的maxconnection只適用于對google的訪問。
好了,現(xiàn)在就可以根據(jù)自己的需要來更改配置了。如果你把maxconnection的取值改成了1000,那么你的測試應(yīng)用程序與服務(wù)器之間所能建立的最高連接數(shù)量就是測試用應(yīng)用程序域的數(shù)量 * 1000,測吧!

轉(zhuǎn)載于:https://www.cnblogs.com/gxh973121/archive/2005/04/18/139484.html

總結(jié)

以上是生活随笔為你收集整理的Concurrent connection limit的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。