源码中
// Non blocking.
stream_set_blocking($this->_mainSocket, 0);
public function acceptConnection($socket)
{
// Accept a connection on server socket.
$new_socket = @stream_socket_accept($socket, 0, $remote_address);
// Thundering herd.
if (!$new_socket) {
return;
}
0是代表非阻塞么?是不时当一个 socket连上来 缓冲区有数据时,才会触发stream_socket_accept,这样是不时阻塞非阻塞没啥区别了。每次aceept都能得到socket
0非阻塞,设置非阻塞主要是为了读$new_socket时不会阻塞。
当客户端链接上来时,就会触发触发stream_socket_accept。不管缓冲区是否有数据。
stream_socket_accept不一定每次都能得到客户端链接,因为有多个进程同时调用stream_socket_accept接受同一个链接的情况,只有一个能成功。
了解,那如果设置1的话 ,拿不到socket连接时,其他进程就都阻塞住了事件循环 ?
不会。
设置非阻塞主要是为了读$new_socket时不会阻塞。