<?php
use Workerman\Lib\Timer;
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Medoo\Medoo;
//require_once __DIR__ . '/../Workerman/Autoloader.php';
include __DIR__."/Workerman/Autoloader.php";
include "Medoo.php";
class WebSocket{
private $configs = [];
private $subscribe_arr = [];
private $count = 0;
private $no_msg_count = 0;
public function __construct($configs)
{
$this->configs = $configs;
}
public function subscribe_add($sub_str){
$this->subscribe_arr = $sub_str;
}
public function subscribe_manage($con){
foreach ($this->subscribe_arr as $val){
$con->send($val);
}
}
public function subscribe_run($callback){
$GLOBALS['callback'] = $callback;
$worker = new Worker();
$wss_url = $this->configs['wss_url'];
$worker->onWorkerStart = function ($worker) use ($wss_url) {
$con = new AsyncTcpConnection($wss_url);
$con->transport = 'ssl';
Timer::add(20, function () use ($con){
to_file('ping');
$con->send('ping');
});
$con->onConnect = function($con) {
to_file('連接中');
$this->subscribe_manage($con);
//$con->send($GLOBALS['subscribe_data']);
};
$con->onMessage = function($con, $data) {
$this->no_msg_count = 0;
if (++$this->count > 100){
$this->count=0;
to_file('數(shù)據(jù)處理中...');
}
call_user_func($GLOBALS['callback'], $data);
};
$con->onClose = function ($con){
to_file('重新連接中');
$con->reconnect(5);
};
$con->connect();
};
Worker::runAll();
}
}
我是作為客戶端在使用的。
使用一段時候后,大概幾個小時,多的時候十幾個小時,會一直觸發(fā) onClose。 一直在觸發(fā)。非常快
因為to_file會記錄到文件里,出現(xiàn)問題,每小時可以寫入幾個G的“重新連接中”,一直在觸發(fā)onclose,不知道為什么一直連不上。
有經(jīng)驗的小伙伴幫看下,不勝感謝。
php start.php status 看下進程是不是不斷的在退出。
Workerman version:3.5.27 PHP version:7.3.5
start time:2020-03-18 01:08:50 run 0 days 16 hours
load average: 2.26, 2, 2 event-loop:\Workerman\Events\Select
沒有一直退出,啟動時間都是一樣的