首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
reload的疑问
### 问题描述 使用 kill -USR1 主进程PID 后worker始终会在超时后强制关闭,并没有即可响应,代码中存在定时器 ### Swoole版本,PHP版本,以及操作系统版本信息 swoole4.4.2 php7.2.31 centos7 ### 相关代码 ```php <?php $server = new Swoole\Server("127.0.0.1", 9503); $server->set([ 'worker_num' => 2, 'max_request' => 0, 'max_wait_time' => 60, 'reload_async' => true, 'daemonize' => 1, 'log_file' => '/tmp/test.log', ]); $server->on('workerStart', function ($server, $workerId){ \Swoole\Timer::tick(500, function() { // echo rand(100, 999)."\n"; }); }); $server->on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; }); $server->on('receive', function ($server, $fd, $reactor_id, $data) { $server->send($fd, "Swoole: {$data}"); $server->close($fd); }); $server->on('close', function ($server, $fd) { echo "connection close: {$fd}\n"; }); $server->start(); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 有什么办法能够让worker进程获取到信号后,用代码把里面的逻辑处理后重启,强制重启会导致某个定时器正在运行逻辑而丢失数据
发布于4年前 · 3 次浏览 · 来自
提问
yiyi
### 问题描述 使用 kill -USR1 主进程PID 后worker始终会在超时后强制关闭,并没有即可响应,代码中存在定时器 ### Swoole版本,PHP版本,以及操作系统版本信息 swoole4.4.2 php7.2.31 centos7 ### 相关代码 ```php <?php $server = new Swoole\Server("127.0.0.1", 9503); $server->set([ 'worker_num' => 2, 'max_request' => 0, 'max_wait_time' => 60, 'reload_async' => true, 'daemonize' => 1, 'log_file' => '/tmp/test.log', ]); $server->on('workerStart', function ($server, $workerId){ \Swoole\Timer::tick(500, function() { // echo rand(100, 999)."\n"; }); }); $server->on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; }); $server->on('receive', function ($server, $fd, $reactor_id, $data) { $server->send($fd, "Swoole: {$data}"); $server->close($fd); }); $server->on('close', function ($server, $fd) { echo "connection close: {$fd}\n"; }); $server->start(); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 有什么办法能够让worker进程获取到信号后,用代码把里面的逻辑处理后重启,强制重启会导致某个定时器正在运行逻辑而丢失数据
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2020-11-19
鲁飞
加上信号监听,收到信号就去处理相关逻辑清理。 达到了 max_wait_time 底层就会强行退出进程 https://wiki.swoole.com/#/question/use?id=%e8%bf%9b%e7%a8%8b%e9%80%80%e5%87%ba%e4%ba%8b%e4%bb%b6
赞
1
回复
微信公众号
热门内容
作者其它话题
- 协程TCP客户端connect域名解析问题
- 定时器tick函数存在协程api时,下个定时器不会等待前一个执行完成吗?
- TCP异步客户端和TCP协程客户端的疑问
- heartbeat_idle_time、heartbeat_check_interval但不触发onclose的必现代码
- 设置了heartbeat_idle_time、heartbeat_check_interval但不触发onclose
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。