多个进程同时监听了同一端口,岂不是不同的应用可以监听同一个端口?

发布于 2022-09-04 23:55:53 字数 178 浏览 10 评论 0

nginx的模型知道是master-worker

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不气馁 2022-09-11 23:55:53

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

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

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

采用SO_REUSEPORT选项可以有效地解决epoll惊群问题,具体测试可以看看在下写的例子:ThunderingHerdTest.cpp

有关SO_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的讨论可以看 We increase productivity by means of SO_REUSEPORT in NGINX 1.9.1

夏末染殇 2022-09-11 23:55:53

pid最小的应该就是master了。

注定孤独终老 2022-09-11 23:55:53

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文