多谢doujiang哥的提示,确实,翻看源码看到了创建多个socket,在ngx_clone_listening函数里面,为一个端口创建了worker个socket。
话说查看代码确实能解答很多疑惑~~
在 2016年10月19日星期三 UTC+8上午10:40:24,doujiang写道:
Hello
在 2016年10月18日 下午8:05,wwaz wwaz
<3824...@qq.com>写道:
7 我的疑问是这样的,通过master fork出多个worker,这些worker都是共同监听了同一个端口,
那么reuse_port这个,根据man手册描述,是让多个套接字共同监听同一个端口。
但是master对于一个端口只创建了一个套接字,哪里来的多个套接字呢?从那个测试的图来看,好像在文件系统中对同一个端口关联了多个套接字。。。这科学么?
8 如果内核真如测试的图中描述的那样,对于每个worker都有自己的监听套接字,且这些监听套接字都bind同一个端口,这样,当请求来时,内核会负责将这些请求均匀分配到不同的监听套接字,这样看来 确实会提升性能。
但问题的关键是,对于同一个端口来说,这些不同的套接字是哪里来的呢??
我看代码比较容易理解,大胆猜测还要小心求证才是
比如翻翻关键字:NGX_HAVE_REUSEPORT
以上就是我的理解~~
在 2016年10月15日星期六 UTC+8下午5:12:47,doujiang写道:
Hello
在 2016年10月15日 下午12:57,wwaz wwaz <3824...@qq.com>写道:
最近在nginx1.9.1中支持了reuse_
port这个功能 ,是准许多个socket监听同一个端口的选项。(在很多情况下就是允许多个进程/线程监听同一端口)。
但这个对于nginx/openresty这样的单master多worker的服务器来说,已经通过master的fork调用,让多个worker都监听了同一个端口,这样的话,这个选项还有意义么?或者说它在哪些情况下,对nginx有意义呢?
意义就在于可以提升性能
至于为何能提升,主要是依赖于内核的改进,具体你可以 google
--