代码如下:
$setting = [
'max_conn' => 1000,
'daemonize' => 1,
'reactor_num' => 4,
'worker_num' => 4,
'task_worker_num' => 0,
'max_request' => 1000,
'backlog' => 65535,
'open_cpu_affinity' => 1,
'open_tcp_nodelay' => 1,
'tcp_defer_accept' => 5,
'open_eof_check' => true,
'package_eof' => "\r\n\r\n",
'heartbeat_idle_time' => 60,
'heartbeat_check_interval' => 1,
'dispatch_mode' => 2,
'log_level' => 0,
'log_file' => './swoole_q_1.log',
];
$server = new swoole_server('0.0.0.0', 9001);
$server->set($setting);
$server->on('workerstart', function ($server, $worker_id) {
echo "worker [pid:{$server->worker_pid}] start" . PHP_EOL;
swoole_async_writefile(__DIR__ . "/q_1.log", "worker [pid:{$server->worker_pid}] start" . PHP_EOL, null, FILE_APPEND);
$server->tick(5000, function () use ($server, $worker_id) {
echo "worker [pid:{$server->worker_pid}] work" . PHP_EOL;
swoole_async_writefile(__DIR__ . "/q_1.log", "worker [pid:{$server->worker_pid}] work" . PHP_EOL, null, FILE_APPEND);
});
});
$server->on('receive', function ($server, $fd, $from_id, $data) {
});
$server->on('ManagerStart', function ($server) {
swoole_async_writefile(__DIR__ . "/q_1.log", "manager start" . PHP_EOL, null, FILE_APPEND);
});
$server->start();
第一种情况,当onManagerStart里面有swoole_async_writefile写日志的时候,重新被拉起的worker进程不能够使用swoole_async_writefile写入日志:
![这里写图片描述](https://img-blog.csdn.net/20170914101711404?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxleGFuZGVyX3BocGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
第二种情况,当onManagerStart里面没有swoole_async_writefile写日志的时候,记录日志均正常:
![这里写图片描述](https://img-blog.csdn.net/20170914101725668?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxleGFuZGVyX3BocGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)