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地址发起请求,需要额外的配置,修改路由表。

好了,到此为止原理已经将完,你可以试试写一个百万链接的服务器端试试。