同事在做多線程訪問webservice的時候,發(fā)現(xiàn)總是很慢,平均速度比單線程訪問要慢得多,后來,用了多進(jìn)程去訪問,結(jié)果就好多了
后來上網(wǎng)查了一下,有個HTTP雙連接限制的情況,原文如下
HTTP 雙連接限制
HTTP 規(guī)范表明,一個 HTTP 客戶端與任一服務(wù)器最多可以同時建立兩個 TCP 連接。這可以防止單個瀏覽器在瀏覽某個頁面(例如,具有 120 個嵌入的縮略圖)時,由于連接請求過多而使服務(wù)器負(fù)載過重。此時,瀏覽器將僅創(chuàng)建 2 個連接,然后通過這兩個管道開始發(fā)送 120 個 HTTP 請求,而不是創(chuàng)建 120 個 TCP 連接并通過每個連接來發(fā)送 HTTP 請求。對于中間層,此方法的問題在于,中間層可能會有 50 個同時請求連接的用戶。如果不得不為每個用戶進(jìn)行一次 MapPoint .NET Web 服務(wù)調(diào)用,將會有 48 個用戶等待兩個管道中的一個空閑下來。
maxconnections
連接到 Web 資源的默認(rèn)雙連接限制可以通過一個名為 connectionManagement 的配置元素來控制。connectionManagement 設(shè)置允許您添加要讓其采用非默認(rèn)連接限制的站點的名稱??梢詫⒁韵聝?nèi)容添加到典型的 Web.config 文件中,將您連接的所有服務(wù)器的連接限制默認(rèn)值增加到 40。
<configuration>
<system.net>
<connectionManagement>
<add address= "* " maxconnection= "40 " />
</connectionManagement>
</system.net>
<system.web>
...
應(yīng)當(dāng)注意的是,對本地計算機的連接數(shù)量從來都沒有限制,因此,如果是連接到本地主機,則此設(shè)置無效。
我想如果一個進(jìn)程為一個HTTP客戶端的話,那么你在這個進(jìn)程里面開多個線程進(jìn)行webservice訪問時,也是同時并發(fā)2個
然后做了測試,多線程返回結(jié)果果然是2個2個往外蹦
然后就加了
<system.net>
<connectionManagement>
<add address= "* " maxconnection= "40 " />
</connectionManagement>
</system.net>
就好了
這里說一些細(xì)節(jié),原來配制文件也有順序,我把上面的配制放在配制文件的頂部就會報錯
adress 的格式 是 http://192.168.0.2/
后面加個/都會報錯
另外,做測試的機子是XP,IIS的最大連接數(shù)為10個,所以只能開10個線程