c++ - 多个进程同时监听了同一端口,岂不是不同的应用可以监听同一个端口?
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-31 10:37:23
0
3
1063

nginx的模型知道是master-worker

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回复(3)
黄舟

这应该是多个进程同时复用一个socket

不过在现代linux中,多个linux中,多个socket同时监听同一个端口也是可能的,在Nginx 1.9.1同时监听同一个端口也是可能的,在Nginx 1.9.1以上版本也支持这一行为

linux 3.9以上内核支持linux 3.9以上内核支持SO_REUSEPORT选项,即允许多个socket bind/listen在同一个端口上。这样,多个进程就可以各自申请socket监听同一个端口,当数据来时,内核做负载均衡,唤醒监听的其中一个进程处理,用法类似于setsockopt(listener, SOL_SOCKET, SO_REUSEPORT, &option, sizeof(option))选项,即允许多个

bind/listen在同一个端口上。这样,多个进程就可以各自申请

监听同一个端口,当数据来时,内核做负载均衡,唤醒监听的其中一个进程处理,用法类似于setsockopt(listener, SOL_SOCKET, SO_REUSEPORT, &option, sizeof(option))SO_REUSEPORT选项可以有效地解决epoll

采用

惊群问题,具体测试可以看看在下写的例子:ThunderingHerdTest.cppSO_REUSEPORT

有关
选项的讨论可参看 The SO_REUSEPORT socket option,关于题主的疑虑,文中这句话可以作为解答:

To prevent unwanted processes from hijacking a port that has already been bound by a server using SO_REUSEPORT, all of the servers that later bind to that port must have an effective user ID that matches the effective user ID used to perform the first bind on the socket.

effective user ID

即不是任意进程都可以绑定在同一个端口上的,只有

相同才可以NginxSO_REUSEPORT

关于Nginx和🎜的讨论可以看 We increase productivity by means of SO_REUSEPORT in NGINX 1.9.1🎜
Ty80

pid最小的应该就是master了。

漂亮男人

单个应用多进程监听同一端口, socket是共享的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!