我服务器有一个php程序用来作为客户端拉取一个websocket连接,获得想要的内容后就结束进程。
我使用 Worker::stopAll() 后,程序没有关闭而是无限重启……不知道为什么。
(在命令行里以debug模式启动就会无限循环执行-重启,直接通过浏览器访问程序的话返回500)
新手上路,感谢各位大佬帮忙看一下!
<?
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function($worker){
$con = new AsyncTcpConnection('ws://127.0.0.1:2000');
$con->onConnect = function(AsyncTcpConnection $con) {
echo "ws连接成功";
$con->send(json_encode(
array("type"=>2)
)
);
};
$con->onMessage = function(AsyncTcpConnection $con, $data) {
switch (json_decode($data,true)["type"]) {
case '2':
//通过ws从另一个程序得到可以备份图片的命令,就备份画板状态图片,完成后结束进程
if(copy("draw.png", "backup/".date("Y-m-d H:i:s").".png")){
echo "备份成功";
}else {
echo "备份失败";
}
break;
default:
echo "与服务器交互失败";
break;
Worker::stopAll();
}
};
};
Worker::runAll();
?>
你是写了语法错误吗,还是说你需要的是
$con->close();
我是想关闭连接,同时结束脚本运行。
我看手册里,worker类有Worker::stopAll()这个接口,描述是说用来结束进程的,但下面例子看来又好像是重启进程的
https://www.workerman.net/doc/workerman/worker/stop-all.html
$con->close() 我试过了,可以断开连接,但是worker实例还在进行,脚本未结束
Worker::stopAll() 只是停止当前进程,当前进程停止后主进程会自动拉起一个新进程替代。如果你要停止整个workerman服务,用
posix_kill(posix_getppid(), SIGINT);
暂时没想到是什么场景要把 master 进程给结束掉。如果结束了,什么时候要再次启动呢?
看我的 处理方法
我昨天 刚刚发现这个问题
https://www.workerman.net/a/1377