【问题标题】:On Windows platform, how does nginx master process share listen sockets to worker?Windows平台下,nginx主进程如何将监听套接字共享给worker?
【发布时间】:2016-10-07 00:29:46
【问题描述】:

我浏览了 Windows 版本的 Nginx 的代码。 但我不明白 master 是如何与 worker 共享监听套接字的。

在 Linux 上是直截了当的。当它 fork() 时,worker 会从 master 继承文件描述。

但是对于Windows版本,在CreateProcess()函数中,将“bInheritHandles”参数域指定为“0”,表示不继承句柄!

那么workers如何与master共享监听socket呢?

我确实阅读了两天的代码,只是为了找到这个问题的答案。 但是还是看不懂。

谢谢!

*这个问题和另一个问题很相似How does nginx worker process share the 'listen socket' 但事实并非如此。因为那是在询问Linux平台上的那个。

【问题讨论】:

    标签: windows sockets nginx


    【解决方案1】:

    它没有。相反,在 Windows 上,每个 nginx 工作进程都会创建自己的侦听套接字,并使用它们来接受连接。

    在相同端口上创建监听套接字是可能的,因为 nginx 在监听套接字上使用setsockopt(SO_REUSEADDR),这允许在 Windows 上完全复制监听套接字。

    这些重复的侦听套接字中只有一个实际工作,这是the documentation 中列出的适用于 Windows 的 nginx 的第一个限制:

    虽然可以启动多个工人,但实际上只有一个工人在做任何工作。

    请注意,适用于 Windows 的 nginx“被认为是 beta 版本”。

    【讨论】:

    • 非常感谢您的清晰解释!很有帮助!
    • 在 WSL 中运行的 nginx 会有多个工作人员实际工作吗?
    • @Marc,WSL 有望提供与 Linux 兼容的环境,因此只要 WSL 实施得当,nginx 有望与多个工作人员一起正常工作。请注意,尽管有报告称存在issues at least with WSL 1,这可能是由于某些与套接字相关的系统调用的模拟不正确。更好的解决方案可能是在实际的 Unix/Linux 系统上运行 nginx。
    猜你喜欢
    • 2017-01-19
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2011-02-15
    • 2021-12-05
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多