<?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('数据处理中...');
}
call_user_func($GLOBALS['callback'], $data);
};
$con->onClose = function ($con){
to_file('重新连接中');
$con->reconnect(5);
};
$con->connect();
};
Worker::runAll();
}
}
我是作为客户端在使用的。
使用一段时候后,大概几个小时,多的时候十几个小时,会一直触发 onClose。 一直在触发。非常快
因为to_file会记录到文件里,出现问题,每小时可以写入几个G的“重新连接中”,一直在触发onclose,不知道为什么一直连不上。
有经验的小伙伴帮看下,不胜感谢。
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
没有一直退出,启动时间都是一样的
如果一直在退出,要怎么处理呢?
心跳
我这是作为客户端使用的
有发送ping啊 这好像是一个bug ,一直断开 重连死循环
你的协议是什么都没写清楚