主要观点:介绍利用 Linux 网络栈相对新的功能SO_REUSEPORT
套接字选项来提高服务器性能,对比SO_REUSEADDR
,详细阐述SO_REUSEPORT
在连接分配、多进程监听等方面的机制及性能影响,并给出客户端和服务器应用的代码示例。
关键信息:
SO_REUSEPORT
允许多个进程在同一端口上监听,内核会忽略包括LISTEN
状态的套接字;- 连接分配通过对客户端和服务器 IP:Port 哈希来实现,以良好分配连接;
- 通过两个测试展示
SO_REUSEPORT
对性能的提升,包括创建单LISTEN
套接字并 fork 48 次,以及每个子进程创建LISTEN
套接字并启用SO_REUSEPORT
; - 给出客户端和服务器应用的代码,包括创建子进程、设置套接字选项、绑定端口、监听等操作。
重要细节: TCP
连接由唯一 5 元组定义,客户端和服务器在不同阶段初始化元组元素;TIME-WAIT
套接字在应用关闭TCP
连接一端时创建;SO_REUSEADDR
在存在已建立或TIME-WAIT
套接字时允许套接字绑定同一 IP:Port 组合,但SO_REUSEPORT
允许在存在LISTEN
套接字时绑定;SO_REUSEPORT
通过reuseport_select_sock()
函数从组中选择套接字,涉及哈希计算和索引操作;- 性能测试中使用特定的内核版本、系统配置和测试流程来测量
SO_REUSEPORT
性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。