그러나 최신 linux에서는 여러 linux中,多个socket同时监听同一个端口也是可能的,在Nginx 1.9.1동일한 포트를 수신하는 것이 가능합니다. 이 동작은 Nginx 1.9.1 이상에서도 지원됩니다.
linux3.9 이상 커널은 동일한 포트에서 여러 linux3.9以上内核支持SO_REUSEPORT选项,即允许多个socketbind/listen在同一个端口上。这样,多个进程就可以各自申请socket监听同一个端口,当数据来时,内核做负载均衡,唤醒监听的其中一个进程处理,用法类似于setsockopt(listener, SOL_SOCKET, SO_REUSEPORT, &option, sizeof(option))바인딩/수신을 허용하는
옵션을 지원합니다. 이러한 방식으로 여러 프로세스가 각각 동일한 포트를 수신하도록 적용할 수 있습니다. 데이터가 오면 커널은 로드 밸런싱을 수행하고 수신 프로세스 중 하나를 깨웁니다. 사용법은 setsockopt(listener, SOL_SOCKET, SO_REUSEPORT, &옵션, 크기(옵션))
SO_REUSEPORT选项可以有效地解决epollThundering herd 문제를 사용하여 특정 테스트에 대해 아래에 작성된 예를 볼 수 있습니다: ThunderingHerdTest.cpp
SO_REUSEPORT 옵션에 대한 논의는 SO_REUSEPORT 소켓 옵션을 참조하세요. 질문자의 의문점에 대해서는 기사의 다음 문장을 답변으로 사용할 수 있습니다.
원치 않는 프로세스가 SO_REUSEPORT를 사용하여 서버에 의해 이미 바인딩된 포트를 하이재킹하는 것을 방지하려면 나중에 해당 포트에 바인딩하는 모든 서버에는 첫 번째 바인딩을 수행하는 데 사용된 유효 사용자 ID와 일치하는 유효한 사용자 ID가 있어야 합니다. 소켓.
즉, 어떤 프로세스도
동일effective user ID인 경우에만 동일한 포트에 바인딩될 수 없습니다.
Nginx 및
에 대한 토론은 NGINX 1.9.1에서 SO_REUSEPORT를 통해 생산성을 향상합니다Nginx和SO_REUSEPORT를 참조하세요.
이것은 동시에 하나를 재사용하는 여러 프로세스여야 합니다
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.cppSO_REUSEPORT
옵션에 대한 논의는 SO_REUSEPORT 소켓 옵션을 참조하세요. 질문자의 의문점에 대해서는 기사의 다음 문장을 답변으로 사용할 수 있습니다.동일
effective user ID
인 경우에만 동일한 포트에 바인딩될 수 없습니다.Nginx
및에 대한 토론은 NGINX 1.9.1에서 SO_REUSEPORT를 통해 생산성을 향상합니다
Nginx
和SO_REUSEPORT
를 참조하세요.PID가 가장 작은 사람이 마스터가 되어야 합니다.
단일 애플리케이션에는 동일한 포트를 수신하는 여러 프로세스가 있으며 소켓은 공유됩니다