知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
直接進入主題,伺服器內核參數調整完畢,網絡設備調試完成,一切就緒,程序改怎麼寫才能達到百萬級TCP連結呢?
不知你是否注意到 nginx 有一個 listen 配置項,Redis 裡有一個 bind 配置項。很多人可能都不理解時用來幹什麼的。
它是用來配置使用那個IP地址監聽80連接埠,它不僅僅用來幹這個。當配置為127.0.0.1 的時候不走網卡,不受網卡頻寬的限制,所以在同一台伺服器的Socket調用,我們通常使用localhost。當配置為 0.0.0.0 的時候表示監聽所有IP地址,可以是多個網卡提高整體頻寬。
我們僅僅是用來測試,所以這個程序應該儘量不操作磁碟,不去打開檔案,減少內存不必要的開銷,節省網卡頻寬。
對於客戶端內核連接埠範圍配置作用於單個IP地址,所以為了能夠使用足夠多的本地連接埠,我們可以在伺服器上配置多個IP地址,通常一個網卡可以配置 254個IP地址。
得出 (65535 - 1024)* 254 = 理論能開出的連接埠
還沒完,我們上網的出口是走預設網關那個網卡的預設IP地址,Linux eth0 上配置的IP地址,而你設置了另外254個IP地址是 eth0:1~254 或者分佈到其他網卡上(eth1,eth2……)。你測試會發現,對於伺服器來說訪問過來的IP地址永遠都是 eth0 那個IP地址,也無法突破 65535的限制。如果你想使用其他的IP地址發起請求,需要額外的配置,修改路由表。
好了,到此為止原理已經將完,你可以試試寫一個百萬連結的伺服器端試試。