찾다

 >  Q&A  >  본문

c++ - 여러 프로세스가 동시에 동일한 포트를 수신하고 있습니다. 서로 다른 애플리케이션이 동일한 포트를 수신할 수 있습니까?

nginx의 모델은 장인으로 알려져 있습니다

曾经蜡笔没有小新曾经蜡笔没有小新2759일 전1113

모든 응답(3)나는 대답할 것이다

  • 黄舟

    黄舟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选项可以有效地解决epollThundering herd 문제를 사용하여 특정 테스트에 대해 아래에 작성된 예를 볼 수 있습니다: ThunderingHerdTest.cpp

    SO_REUSEPORT 옵션에 대한 논의는 SO_REUSEPORT 소켓 옵션을 참조하세요. 질문자의 의문점에 대해서는 기사의 다음 문장을 답변으로 사용할 수 있습니다.

    원치 않는 프로세스가 SO_REUSEPORT를 사용하여 서버에 의해 이미 바인딩된 포트를 하이재킹하는 것을 방지하려면 나중에 해당 포트에 바인딩하는 모든 서버에는 첫 번째 바인딩을 수행하는 데 사용된 유효 사용자 ID와 일치하는 유효한 사용자 ID가 있어야 합니다. 소켓.

    즉, 어떤 프로세스도

    동일effective user ID인 경우에만 동일한 포트에 바인딩될 수 없습니다.

    Nginx

    에 대한 토론은 NGINX 1.9.1에서 SO_REUSEPORT를 통해 생산성을 향상합니다NginxSO_REUSEPORT를 참조하세요.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-31 10:39:23

    PID가 가장 작은 사람이 마스터가 되어야 합니다.

    회신하다
    0
  • 漂亮男人

    漂亮男人2017-05-31 10:39:23

    단일 애플리케이션에는 동일한 포트를 수신하는 여러 프로세스가 있으며 소켓은 공유됩니다

    회신하다
    0
  • 취소회신하다