有关SO_REUSEPORT选项的讨论可参看 The SO_REUSEPORT socket option,关于题主的疑虑,文中这句话可以作为解答:
To prevent unwanted processes from hijacking a port that has already been bound by a server using SO_REUSEPORT, all of the servers that later bind to that port must have an effective user ID that matches the effective user ID used to perform the first bind on the socket.
即不是任意进程都可以绑定在同一个端口上的,只有effective user ID相同才可以
关于Nginx和SO_REUSEPORT
Walau bagaimanapun, dalam linux moden, berbilang soket boleh mendengar port yang sama pada masa yang sama Ini juga disokong dalam Nginx 1.9.1 dan ke atas 🎜
🎜linux3.9Inti di atas menyokong pilihan SO_REUSEPORT, yang membenarkan berbilang socketbind/listenpada port yang sama. Dengan cara ini, berbilang proses masing-masing boleh memohon soket untuk mendengar port yang sama Apabila data datang, kernel melakukan pengimbangan beban dan membangunkan salah satu proses mendengar Penggunaannya adalah serupa dengan setsockopt(pendengar, SOL_SOCKET, SO_REUSEPORT, &option, sizeof(option))🎜
🎜Menggunakan pilihan SO_REUSEPORT boleh menyelesaikan masalah gerombolan gemuruh epoll Untuk ujian khusus, anda boleh melihat contoh yang ditulis di bawah: ThunderingHerdTest.cpp🎜
🎜Untuk perbincangan tentang pilihan SO_REUSEPORT, sila rujuk pilihan soket SO_REUSEPORT Berkenaan keraguan penyoal, ayat dalam artikel ini boleh digunakan sebagai jawapan: 🎜
🎜Untuk mengelakkan proses yang tidak diingini daripada merampas port yang telah diikat oleh pelayan menggunakan SO_REUSEPORT, semua pelayan yang kemudiannya mengikat ke port tersebut mesti mempunyai ID pengguna yang berkesan yang sepadan dengan ID pengguna berkesan yang digunakan untuk melaksanakan yang pertama ikat pada soket.🎜
🎜Iaitu, tiada sebarang proses boleh diikat ke port yang sama, hanya jika ID pengguna yang berkesan adalah sama🎜
🎜Untuk perbincangan tentang Nginx dan SO_REUSEPORT, sila lihat Kami meningkatkan produktiviti melalui SO_REUSEPORT dalam NGINX 1.9.1🎜
Ini sepatutnya berbilang proses menggunakan semula satu
soket
pada masa yang samasocket
不过在现代
linux
中,多个socket
同时监听同一个端口也是可能的,在Nginx 1.9.1
以上版本也支持这一行为linux
3.9
以上内核支持SO_REUSEPORT
选项,即允许多个socket
bind/listen
在同一个端口上。这样,多个进程就可以各自申请socket
监听同一个端口,当数据来时,内核做负载均衡,唤醒监听的其中一个进程处理,用法类似于setsockopt(listener, SOL_SOCKET, SO_REUSEPORT, &option, sizeof(option))
采用
SO_REUSEPORT
选项可以有效地解决epoll
惊群问题,具体测试可以看看在下写的例子:ThunderingHerdTest.cpp有关
SO_REUSEPORT
选项的讨论可参看 The SO_REUSEPORT socket option,关于题主的疑虑,文中这句话可以作为解答:即不是任意进程都可以绑定在同一个端口上的,只有
effective user ID
相同才可以关于
Walau bagaimanapun, dalamNginx
和SO_REUSEPORT
linux
moden, berbilangsoket
boleh mendengar port yang sama pada masa yang sama Ini juga disokong dalamNginx 1.9.1
dan ke atas 🎜 🎜linux
3.9
Inti di atas menyokong pilihanSO_REUSEPORT
, yang membenarkan berbilangsocket
bind/listenpada port yang sama. Dengan cara ini, berbilang proses masing-masing boleh memohon
soket
untuk mendengar port yang sama Apabila data datang, kernel melakukan pengimbangan beban dan membangunkan salah satu proses mendengar Penggunaannya adalah serupa dengansetsockopt(pendengar, SOL_SOCKET, SO_REUSEPORT, &option, sizeof(option))
🎜 🎜Menggunakan pilihanSO_REUSEPORT
boleh menyelesaikan masalah gerombolan gemuruhepoll
Untuk ujian khusus, anda boleh melihat contoh yang ditulis di bawah: ThunderingHerdTest.cpp🎜 🎜Untuk perbincangan tentang pilihanSO_REUSEPORT
, sila rujuk pilihan soket SO_REUSEPORT Berkenaan keraguan penyoal, ayat dalam artikel ini boleh digunakan sebagai jawapan: 🎜 🎜Iaitu, tiada sebarang proses boleh diikat ke port yang sama, hanya jikaID pengguna yang berkesan
adalah sama🎜 🎜Untuk perbincangan tentangNginx
danSO_REUSEPORT
, sila lihat Kami meningkatkan produktiviti melalui SO_REUSEPORT dalam NGINX 1.9.1🎜Yang mempunyai pid terkecil sepatutnya menjadi tuan.
Satu aplikasi mempunyai berbilang proses mendengar port yang sama, dan soket dikongsi