欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

TCP客戶端Socket如何立即釋放端口?

admin
2017年4月12日 1:29 本文熱度 26844
在做一個(gè)關(guān)于web負(fù)載均衡的壓力測(cè)試的時(shí)候碰到一個(gè)問(wèn)題。
測(cè)試采用的是單機(jī)測(cè)試,web服務(wù)器+3個(gè)負(fù)載均衡節(jié)點(diǎn)服務(wù)+客戶端 都在同一臺(tái)4核工作機(jī)上。
由于測(cè)試邏輯簡(jiǎn)單,1024個(gè)http客戶端4s左右會(huì)吃光6W個(gè)端口,繼續(xù)訪問(wèn)就會(huì)出現(xiàn)錯(cuò)誤:由于系統(tǒng)緩沖區(qū)空間不足或隊(duì)列已滿,不能執(zhí)行套接字上的操作。錯(cuò)誤的原因是Socket占用的端口沒(méi)有被釋放,需要等待20+s才能進(jìn)行下一輪測(cè)試,很浪費(fèi)時(shí)間。

需要說(shuō)明的是,釋放客戶端端口不像服務(wù)器端口那樣關(guān)閉Socket就可以了。客戶端端口在Socket關(guān)閉之后處于Close_Wait狀態(tài),這個(gè)狀態(tài)時(shí)間應(yīng)該是由HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的TcpTimedWaitDelay鍵值決定的,但是這個(gè)值最小值是30s。
另外可以使用API函數(shù)SetTcpEntry強(qiáng)行關(guān)閉連接釋放端口,但是某些操作系統(tǒng)由于UAC的原因需要提升為管理員權(quán)限,如果通過(guò)app.manifest設(shè)置管理員身份運(yùn)行,會(huì)彈出一個(gè)提升權(quán)限的對(duì)話框,作為一個(gè)性能測(cè)試的Demo彈出這樣一個(gè)框感覺(jué)有點(diǎn)嚇人。

希望高人指點(diǎn),如何在不需要用戶參與的情況下把端口釋放掉。需要具體測(cè)試代碼的話可以到這里下載https://fastcsharp.codeplex.com/,測(cè)試項(xiàng)目為demo.loadBalancingTcpCommandWeb。

該文章在 2017/4/12 1:29:55 編輯過(guò)

全部評(píng)論5

admin
2017年4月12日 1:30
發(fā)現(xiàn)連接數(shù)超某數(shù)時(shí),及時(shí)清除不用套接字子線程,服務(wù)器與客戶端均可設(shè)超時(shí)強(qiáng)制關(guān)閉
Visual Basic code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    ''及時(shí)清除不用的子線程。
    Private Sub dogthread(ByVal Tzobj As System.ObjectByVal As System.EventArgs)
        dogrunBZ(Tzobj) = True                                                              ''正在運(yùn)行時(shí),防止重復(fù)運(yùn)行
        Try
            mySocket(Tzobj).Shutdown(SocketShutdown.Receive)   ''關(guān)閉套接字接收
            ''mySocket(Tzobj).Shutdown(SocketShutdown.Both)        ''組態(tài)王對(duì)此條支持不好
        Catch
        End Try
        Try
            mySocket(Tzobj).Close()                                                          ''引發(fā)子線程立即異常,中斷子線程循環(huán)
        Catch
        End Try
        Try
            myThread(Tzobj).Abort()                                                          ''中止某個(gè)線程,銷(xiāo)毀這些線程,需要很多時(shí)間!
            myThread(Tzobj).Join(300)                                                     ''等待300毫秒,超時(shí)也終止,防止不出來(lái)
        Catch
        End Try
        Try
            mySocket(Tzobj) = Nothing                                                     ''防止組態(tài)王響應(yīng)沒(méi)那么快!!!
        Catch
        End Try
        GC.Collect()
        dogrunBZ(Tzobj) = False                                                             ''運(yùn)行完畢標(biāo)志 
    End Sub

該評(píng)論在 2017/4/12 1:30:48 編輯過(guò)
admin
2017年4月12日 1:31
Visual Basic code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    ''及時(shí)清除不用的子線程。
    Private Sub dogthread(ByVal Tzobj As System.ObjectByVal As System.EventArgs)
        dogrunBZ(Tzobj) = True                                 ''正在運(yùn)行時(shí),防止重復(fù)運(yùn)行
        Try
            mySocket(Tzobj).Shutdown(SocketShutdown.Receive)   ''關(guān)閉套接字接收
            ''mySocket(Tzobj).Shutdown(SocketShutdown.Both)     ''組態(tài)王對(duì)此條支持不好
        Catch
        End Try
        Try
            mySocket(Tzobj).Close()                            ''引發(fā)子線程立即異常,中斷子線程循環(huán)
        Catch
        End Try
        Try
            myThread(Tzobj).Abort()                            ''中止某個(gè)線程,銷(xiāo)毀這些線程,需要很多時(shí)間!
            myThread(Tzobj).Join(300)                          ''等待300毫秒,超時(shí)也終止,防止不出來(lái)
        Catch
        End Try
        Try
            mySocket(Tzobj) = Nothing                          ''防止組態(tài)王響應(yīng)沒(méi)那么快!!!
        Catch
        End Try
        GC.Collect()
        dogrunBZ(Tzobj) = False                                ''運(yùn)行完畢標(biāo)志 
    End Sub

該評(píng)論在 2017/4/12 1:31:21 編輯過(guò)
admin
2017年4月12日 1:31
謝謝回復(fù),真不是這么簡(jiǎn)單的事。你可以試試能不能在30s之內(nèi)創(chuàng)建>65536個(gè)客戶端連接。

該評(píng)論在 2017/4/12 1:31:56 編輯過(guò)
admin
2017年4月12日 1:32
我對(duì)tcp研究的不是那么深.. 請(qǐng)問(wèn)你這個(gè)6W多連接  是長(zhǎng)連接沒(méi)有斷開(kāi)的?

不是吧 client的端口也沒(méi)這么多..

如果是ope send close dispose的話 感覺(jué)還差不多可以..

否則這也不叫長(zhǎng)連接了啊.....

難道你的意思 本地client使用了5000端口連接 然后這5000還可以個(gè)下一個(gè)client用?

不存在啊..那么你2個(gè)client 服務(wù)器如何找到客戶端...

該評(píng)論在 2017/4/12 1:32:27 編輯過(guò)
admin
2017年4月12日 1:33
1
2
3
4
5
6
            TcpClient c = new TcpClient();
            c.Connect(IPAddress.Parse("x"), o);
            c.Client.Send(by);
            c.Client.Shutdown(SocketShutdown.Both);
            c.Client.Close();
            c.Close();

這雖然是tcp_client但是發(fā)了就沒(méi)了.....具體我還真沒(méi)測(cè)試過(guò)..不知道我想的是不是跟你想的一樣..

該評(píng)論在 2017/4/12 1:33:04 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved