关闭连接关闭问题

azafek

我想问下在WORKER里的ONSTART方法里用到了NEW AsyncTcpConnection();

我想在WORKER STOP的时候 关闭这个AsyncTcpConnection连接。

另外 STOP回调会等方法执行完成吗? 或者说有什么方法让我确保我的方法能处理完成后再停止??

2579 2 0
2个回答

walkor

进程停止时AsyncTcpConnection 会自动关闭。

stop时,如果进程在处理业务则等待,最长等待2秒,如果2秒内业务还没处理完就强制退出,AsyncTcpConnection也会关闭。

  • azafek 2020-03-24

    谢谢,是这样的,我这边的要求是:对方要求我‘优雅’的退出,也就是worker stop的时候,我需要先告诉对方服务器我要关闭了(类似登出账号),然后再关闭AsyncTcpConnection。

    但是现在基本一STOP直接就关闭了。有没有什么办法让他确保我做了一些事情后 关闭

  • azafek 2020-03-24

    AsyncTcpConnection 是不是直接就被关闭了,我目前看的情况是 这样的,而不是等待2秒

  • azafek 2020-03-24

    想要有个交互的过程,大概要1秒左右,STOP时, AsyncTcpConnection发送到对方: 我要退出 对方回应:OK

    然后解除连接

    目前情况是发送应该是发送过去了,但是ONMESSAGE没有收到信息

walkor

在onWorkerStop里使用AsyncTcpConnection发送我要退出,收到回应后调用Worker::stopAll();来关闭连接。停止的使用是用优雅停止命令 php start.php stop -g
代码类似如下:

$worker = new Worker();
$worker->onWorkerStart = function(){
    global $con;
    $con = new AsyncTcpConnection(...);
    $con->onMessage = funcyion(){};
    $con->connect();
};
$worker->onWorkerStop = function () {
    global $con;
    // 重置$con的onMessage,接收对方优雅停止的响应OK
    $con->onMessage = function($con, $data){
        if ($data === 'OK') {
            exit(0);
        }
    };
    $con->send('我要退出的包');
};

优雅停止命令 php start.php stop -g

  • azafek 2020-03-24

    试了下是有效的,谢谢大佬,手册上搜不到关于优雅退出的信息

年代过于久远,无法发表回答
🔝