EV_READ的回调方法问题

0

源码中


        // 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

已邀请:

walkor

赞同来自:

0非阻塞,设置非阻塞主要是为了读$new_socket时不会阻塞。
当客户端链接上来时,就会触发触发stream_socket_accept。不管缓冲区是否有数据。
stream_socket_accept不一定每次都能得到客户端链接,因为有多个进程同时调用stream_socket_accept接受同一个链接的情况,只有一个能成功。

ayamzh

赞同来自:

了解,那如果设置1的话 ,拿不到socket连接时,其他进程就都阻塞住了事件循环 ?

walkor

赞同来自:

不会。
设置非阻塞主要是为了读$new_socket时不会阻塞。

要回复问题请先登录注册