SO_REUSEPORTは、同じポートにバインドする複数のプロセスまたはスレッドをサポート
各プロセスは、独自のソケットを作成し、バインド、聞いて、同じアドレスとポートを受け入れることができ、それぞれが独立したと同じです。同じマルチプロセスモニタポートを聞かせて、各プロセスはaccept socket fd
、新たな接続が確立され、カーネルがプロセスに目を覚ますでしょうがあり、異なっているaccept
、とバランスの取れた性的な目覚めを確保
<?PHPの $コンテキスト = stream_context_create (); stream_context_set_option($文脈、 'ソケット'、 'SO_REUSEPORT'、1 ); 用($ iは = 0; $ I <2; $ I ++ ){ $ PID = pcntl_fork()。 もし($ PID == 0 ){ ながら、(真){ $ソケット = stream_socket_server( "TCP://0.0.0.0:8000"、$ errnoに、$ errstrは、STREAM_SERVER_BIND | STREAM_SERVER_LISTEN、$コンテキスト); 一方、($ CONN = @ stream_socket_accept($ソケット、5 )){ 関数fwrite($ CONN、getmypid。。() ':时间:' 日付( 'はYmd H:I:S') "\ n" ); fcloseを($ CONN )。 } FCLOSE($ソケット)。 } } } ながら(1 ){ $ PID = pcntl_wait($状態)。 var_dump($ pidを、$状態); 睡眠(1 )。 }