我服務器有一個php程序用來作為客戶端拉取一個websocket連接,獲得想要的內容后就結束進程。
我使用 Worker::stopAll() 后,程序沒有關閉而是無限重啟……不知道為什么。
(在命令行里以debug模式啟動就會無限循環(huán)執(zhí)行-重啟,直接通過瀏覽器訪問程序的話返回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從另一個程序得到可以備份圖片的命令,就備份畫板狀態(tài)圖片,完成后結束進程
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()這個接口,描述是說用來結束進程的,但下面例子看來又好像是重啟進程的
http://www.wtbis.cn/doc/workerman/worker/stop-all.html
$con->close() 我試過了,可以斷開連接,但是worker實例還在進行,腳本未結束
Worker::stopAll() 只是停止當前進程,當前進程停止后主進程會自動拉起一個新進程替代。如果你要停止整個workerman服務,用 posix_kill(posix_getppid(), SIGINT);