您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman回调onWorkerReload
发布时间:2021-12-02 22:45:27编辑:雪饮阅读()
onWorkerReload
说明:
callback Worker::$onWorkerReload
此特性不常用到。
设置Worker收到reload信号后执行的回调。
可以利用onWorkerReload回调做很多事情,例如在不需要重启进程的情况下重新加载业务配置文件。
注意:
子进程收到reload信号默认的动作是退出重启,以便新进程重新加载业务代码完成代码更新。所以reload后子进程在执行完onWorkerReload回调后便立刻退出是正常现象。
如果在收到reload信号后只想让子进程执行onWorkerReload,不想退出,可以在初始化Worker实例时设置对应的Worker实例的reloadable属性为false。
回调函数的参数
$worker
即Worker对象
脚本实例:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
// 设置reloadable为false,即子进程收到reload信号不执行重启
$worker->reloadable = false;
// 执行reload后告诉所有客户端服务端执行了reload
$worker->onWorkerReload = function(Worker $worker)
{
foreach($worker->connections as $connection)
{
$connection->send('worker reloading');
}
};
// 运行worker
Worker::runAll();
?>
实例运行:
[root@izj6c2jeancylo0ppo4vz5z workerman]# php test.php start
Workerman[test.php] start in DEBUG mode
------------------------------------------- WORKERMAN --------------------------------------------
Workerman version:4.0.22 PHP version:7.0.33
-------------------------------------------- WORKERS ---------------------------------------------
proto user worker listen processes status
tcp root none websocket://0.0.0.0:8484 1 [OK]
--------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
Workerman[test.php] reloading
Workerman[test.php] reloading
Workerman[test.php] reloading
接受了重载:
[root@izj6c2jeancylo0ppo4vz5z workerman]# php test.php reload
Workerman[test.php] reload
客户端脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="https://www.w3school.com.cn/jquery/jquery-1.11.1.min.js"></script>
<script type="">
$(document).ready(function(){
var ws = new WebSocket("ws://47.240.19.5:8484");
//申请一个WebSocket对象,参数是服务端地址,同http协议使用http://开头一样,WebSocket协议的url使用ws://开头,另外安全的WebSocket协议使用wss://开头
ws.onopen = function(){
//当WebSocket创建成功时,触发onopen事件
console.log("open");
ws.send("hello"); //将消息发送到服务端
}
ws.onmessage = function(e){
console.log(e);
//当客户端收到服务端发来的消息时,触发onmessage事件,参数e.data包含server传递过来的数据
ws.send("hello");
}
ws.onclose = function(e){
//当客户端收到服务端发送的关闭连接请求时,触发onclose事件
console.log("close");
}
ws.onerror = function(e){
//如果出现连接、处理、接收、发送数据失败的时候触发onerror事件
console.log(error);
}
});
</script>
</head>
<body>
</body>
</html>
客户端接收到的reload:

关键字词:workerman,onWorkerReload,回调
相关文章
- workerman回调onWorkerStart
- workerman接口listen接合reusePort实现端口复用多实例
- workerman接口runAll运行多个不同woker实例(不同协议)
- workerman接口stopAll及多线程请求测试
- workerman利用Timer库的persistent属性实现仅定时执行
- workerman利用daemonize属性实现代码层控制进程启动方
- workerman利用reloadable属性实现新增业务代码载入并
- workerman属性stdoutFile(输出重定向)及daemonize实现脚
- workerman利用属性user实现指定用户运行进程
- workerman利用属性pidFile自定义进程pid文件