客戶端發起超過6w個連接

    在內存、cpu、帶寬足夠的情況下,當我們編寫客戶端代碼發起socket連接,在連接開到超過6w多之後就會開始出現無法分配地址的錯誤。因爲,socket客戶端在發起連接到server的同時也會開啓一個端口進行通訊,client在server那邊的標記是ip:port。port的上限是65535,沒辦法突破這個大小,那我們只需要增加ip的選擇就可以了,那樣可以開的客戶端連接的數量=ip數量*65535-已經被佔用的端口,讓我們的一臺pc可以發起100k連接。

     各種系統都存在設置虛擬ip(一個網卡綁定多個ip的方式)的方案,非常的簡單。這裏就不描述了,這裏想分享的是,一些常用的代碼發起socket連接的綁定固定ip的方式。這裏的綁定不僅僅是隻有server端,其實同樣的client端也可以綁定ip。

//golang
netAddr := &net.TCPAddr{IP:net.ParseIP("指定ip")}
d := net.Dialer{Timeout: timeout, LocalAddr: netAddr}
conn, err := d.Dial("tcp", "xxx:10086")
//java
Socket s = new Socket();
s.bind(new InetSocketAddress("localhostIP", 5000));
s.connect(new InetSocketAddress("google.com", 80));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章