狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

admin
2017年4月12日 1:29 本文熱度 26887
在做一個關于web負載均衡的壓力測試的時候碰到一個問題。
測試采用的是單機測試,web服務器+3個負載均衡節點服務+客戶端 都在同一臺4核工作機上。
由于測試邏輯簡單,1024個http客戶端4s左右會吃光6W個端口,繼續訪問就會出現錯誤:由于系統緩沖區空間不足或隊列已滿,不能執行套接字上的操作。錯誤的原因是Socket占用的端口沒有被釋放,需要等待20+s才能進行下一輪測試,很浪費時間。

需要說明的是,釋放客戶端端口不像服務器端口那樣關閉Socket就可以了??蛻舳硕丝谠赟ocket關閉之后處于Close_Wait狀態,這個狀態時間應該是由HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的TcpTimedWaitDelay鍵值決定的,但是這個值最小值是30s。
另外可以使用API函數SetTcpEntry強行關閉連接釋放端口,但是某些操作系統由于UAC的原因需要提升為管理員權限,如果通過app.manifest設置管理員身份運行,會彈出一個提升權限的對話框,作為一個性能測試的Demo彈出這樣一個框感覺有點嚇人。

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

該文章在 2017/4/12 1:29:55 編輯過

全部評論5

admin
2017年4月12日 1:30
發現連接數超某數時,及時清除不用套接字子線程,服務器與客戶端均可設超時強制關閉
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
    ''及時清除不用的子線程。
    Private Sub dogthread(ByVal Tzobj As System.ObjectByVal As System.EventArgs)
        dogrunBZ(Tzobj) = True                                                              ''正在運行時,防止重復運行
        Try
            mySocket(Tzobj).Shutdown(SocketShutdown.Receive)   ''關閉套接字接收
            ''mySocket(Tzobj).Shutdown(SocketShutdown.Both)        ''組態王對此條支持不好
        Catch
        End Try
        Try
            mySocket(Tzobj).Close()                                                          ''引發子線程立即異常,中斷子線程循環
        Catch
        End Try
        Try
            myThread(Tzobj).Abort()                                                          ''中止某個線程,銷毀這些線程,需要很多時間!
            myThread(Tzobj).Join(300)                                                     ''等待300毫秒,超時也終止,防止不出來
        Catch
        End Try
        Try
            mySocket(Tzobj) = Nothing                                                     ''防止組態王響應沒那么快?。?!
        Catch
        End Try
        GC.Collect()
        dogrunBZ(Tzobj) = False                                                             ''運行完畢標志 
    End Sub

該評論在 2017/4/12 1:30:48 編輯過
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
    ''及時清除不用的子線程。
    Private Sub dogthread(ByVal Tzobj As System.ObjectByVal As System.EventArgs)
        dogrunBZ(Tzobj) = True                                 ''正在運行時,防止重復運行
        Try
            mySocket(Tzobj).Shutdown(SocketShutdown.Receive)   ''關閉套接字接收
            ''mySocket(Tzobj).Shutdown(SocketShutdown.Both)     ''組態王對此條支持不好
        Catch
        End Try
        Try
            mySocket(Tzobj).Close()                            ''引發子線程立即異常,中斷子線程循環
        Catch
        End Try
        Try
            myThread(Tzobj).Abort()                            ''中止某個線程,銷毀這些線程,需要很多時間!
            myThread(Tzobj).Join(300)                          ''等待300毫秒,超時也終止,防止不出來
        Catch
        End Try
        Try
            mySocket(Tzobj) = Nothing                          ''防止組態王響應沒那么快!??!
        Catch
        End Try
        GC.Collect()
        dogrunBZ(Tzobj) = False                                ''運行完畢標志 
    End Sub

該評論在 2017/4/12 1:31:21 編輯過
admin
2017年4月12日 1:31
謝謝回復,真不是這么簡單的事。你可以試試能不能在30s之內創建>65536個客戶端連接。

該評論在 2017/4/12 1:31:56 編輯過
admin
2017年4月12日 1:32
我對tcp研究的不是那么深.. 請問你這個6W多連接  是長連接沒有斷開的?

不是吧 client的端口也沒這么多..

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

否則這也不叫長連接了啊.....

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

不存在啊..那么你2個client 服務器如何找到客戶端...

該評論在 2017/4/12 1:32:27 編輯過
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但是發了就沒了.....具體我還真沒測試過..不知道我想的是不是跟你想的一樣..

該評論在 2017/4/12 1:33:04 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved