SO_REUSEPORT を使用してサーバーによって既にバインドされているポートが不要なプロセスによってハイジャックされるのを防ぐために、後でそのポートにバインドするすべてのサーバーは、最初のバインドを実行するために使用された実効ユーザー ID と一致する実効ユーザー ID を持っている必要があります。ソケット
つまり、プロセスが同じポートにバインドできるのは、プロセスが同じ
である場合のみです。
Nginx と effective user ID については、「NGINX 1.9.1 の SO_REUSEPORT による生産性の向上」を参照してください。
これは、同時に 1 つを再利用する複数のプロセスである必要があります
socket
ただし、最新の
linux
では、複数のlinux
中,多个socket
同时监听同一个端口也是可能的,在Nginx 1.9.1
が同じポートを同時にリッスンすることができます。この動作はNginx 1.9.1
以降でもサポートされています。
オプションをサポートしています。このようにして、複数のプロセスがそれぞれ同じポートをリッスンするように適用できます。データが到着すると、カーネルはロード バランシングを実行し、リッスンしているプロセスの 1 つを起動します。使用法はlinux
3.9
以降のカーネルは、同じポート上で複数のlinux
3.9
以上内核支持SO_REUSEPORT
选项,即允许多个socket
bind/listen
在同一个端口上。这样,多个进程就可以各自申请socket
监听同一个端口,当数据来时,内核做负载均衡,唤醒监听的其中一个进程处理,用法类似于setsockopt(listener, SOL_SOCKET, SO_REUSEPORT, &option, sizeof(option))
bind/listen
を許可するsetsockopt(listener, SOL_SOCKET, SO_REUSEPORT,) と似ています。 &オプション、sizeof (オプション))
SO_REUSEPORT
选项可以有效地解决epoll
Thundering herd 問題の使用: 特定のテストについては、以下の例を参照してください: ThunderingHerdTest.cppオプションの説明については、「SO_REUSEPORT ソケット オプション」を参照してください。質問者の疑問については、記事内の次の文が答えとして使用できます。
SO_REUSEPORT を使用してサーバーによって既にバインドされているポートが不要なプロセスによってハイジャックされるのを防ぐために、後でそのポートにバインドするすべてのサーバーは、最初のバインドを実行するために使用された実効ユーザー ID と一致する実効ユーザー ID を持っている必要があります。ソケット である場合のみです。SO_REUSEPORT
Nginx
とeffective user ID
については、「NGINX 1.9.1 の SO_REUSEPORT による生産性の向上」を参照してください。pid が最も小さいものがマスターとなるはずです。
単一のアプリケーションには同じポートをリッスンする複数のプロセスがあり、ソケットは共有されます