swoole:swoole_async_writefile和onManagerStart遇到的一个问题记录

1 篇文章 0 订阅
代码如下:
$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) {
    // 这里写日志的话,在kill掉子进程之后,重新拉起的子进程就不会继续写日志
    // 这里不写日志,是正常的
    // 在addProcess里面这种情况一样存在
    swoole_async_writefile(__DIR__ . "/q_1.log", "manager start" . PHP_EOL, null, FILE_APPEND);
});

$server->start();
第一种情况,当onManagerStart里面有swoole_async_writefile写日志的时候,重新被拉起的worker进程不能够使用swoole_async_writefile写入日志:

这里写图片描述

第二种情况,当onManagerStart里面没有swoole_async_writefile写日志的时候,记录日志均正常:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值