nginx의 모델은 장인으로 알려져 있습니다
黄舟2017-05-31 10:39:23
이것은 동시에 하나를 재사용하는 여러 프로세스여야 합니다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))
바인딩/수신
을 허용하는
setsockopt(listener, SOL_SOCKET, SO_REUSEPORT, &옵션, 크기(옵션))
SO_REUSEPORT
选项可以有效地解决epoll
Thundering herd 문제를 사용하여 특정 테스트에 대해 아래에 작성된 예를 볼 수 있습니다: ThunderingHerdTest.cpp
SO_REUSEPORT
옵션에 대한 논의는 SO_REUSEPORT 소켓 옵션을 참조하세요. 질문자의 의문점에 대해서는 기사의 다음 문장을 답변으로 사용할 수 있습니다.
원치 않는 프로세스가 SO_REUSEPORT를 사용하여 서버에 의해 이미 바인딩된 포트를 하이재킹하는 것을 방지하려면 나중에 해당 포트에 바인딩하는 모든 서버에는 첫 번째 바인딩을 수행하는 데 사용된 유효 사용자 ID와 일치하는 유효한 사용자 ID가 있어야 합니다. 소켓.즉, 어떤 프로세스도
동일effective user ID
인 경우에만 동일한 포트에 바인딩될 수 없습니다.
Nginx
및 에 대한 토론은 NGINX 1.9.1에서 SO_REUSEPORT를 통해 생산성을 향상합니다Nginx
和SO_REUSEPORT
를 참조하세요.