workerman 作为客户端使用,一直触发onClose.

ala3246875
<?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,不知道为什么一直连不上。
有经验的小伙伴帮看下,不胜感谢。

2216 4 0
4个回答

six

php start.php status 看下进程是不是不断的在退出。

  • ala3246875 2020-03-18

    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

    没有一直退出,启动时间都是一样的

  • ala3246875 2020-03-18

    如果一直在退出,要怎么处理呢?

dignfei

心跳

  • 暂无评论
ala3246875

我这是作为客户端使用的
有发送ping啊 这好像是一个bug ,一直断开 重连死循环

  • 暂无评论
dignfei

你的协议是什么都没写清楚

  • 暂无评论
年代过于久远,无法发表回答
🔝