Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

19.3. 程序怎麼寫?

直接進入主題,伺服器內核參數調整完畢,網絡設備調試完成,一切就緒,程序改怎麼寫才能達到百萬級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地址發起請求,需要額外的配置,修改路由表。

好了,到此為止原理已經將完,你可以試試寫一個百萬連結的伺服器端試試。