錯(cuò)誤代碼示例:
Master::$globalEvent = new EventLoop();
Master::$globalEvent->add($mainSocket, function ($sock) {
$newSocket = stream_socket_accept($sock, 0, $remoteAddress);
\stream_set_blocking($newSocket, 0);
// Compatible with hhvm
if (\function_exists('stream_set_read_buffer')) {
\stream_set_read_buffer($newSocket, 0);
}
echo 'remote address : ' . $remoteAddress . PHP_EOL;
// error1 $res = Master::$globalEvent->add($newSocket, [TcpConn::class, 'readBak'], 'stream_socket_accept');
//error2
$res = Master::$globalEvent->add($newSocket, function ($socket) {
$buff = fread($socket, 65536);
echo "客戶端請(qǐng)求來(lái)了~\n";
echo $buff . "\n";
fwrite($socket, "HTTP/1.1 200 OK\r\nAccept: application/json, text/plain, */*\r\nConnection: keep-alive\r\nContent-Length: 6\r\n\r\nhello~");
// }, 'stream_socket_accept');
}, 'stream_socket_server');
Master::$globalEvent->loop();
在第一次stream_socket_server之后,把服務(wù)端socket添加進(jìn)事件循環(huán)之后,在這個(gè)事件循環(huán)的閉包里,再次stream_socket_accept這個(gè)方法的調(diào)用,把新的連接再次丟入事件循環(huán),這個(gè)時(shí)候,第二個(gè)閉包放的代碼不會(huì)執(zhí)行