想问下这样设置一定请求会重启当前进程的话。重启当前进程之前发送的数据会失败吗?

codeninjia
$worker->onMessage = function($connection, $data) {
$connection->send($ret);
    static $request_count;
    // 业务处理略
    if(++$request_count > 10000) {
        // 请求数达到10000后退出当前进程,主进程会自动重启一个新的进程
        Worker::stopAll();
    }
};

我想知道这样处理的话send出去的数据能发送成功吗?当处理到一定请求之后重启当前进程的话。

2678 1 0
1个回答

walkor 打赏

正常情况下都会发送成功,极端情况可能不成功,比如发送了超大的数据,数据积压在workerman的数据缓冲区的情况。
 
如果是短连接业务,最好是有个判断 count($worker->connections) == 0 的时候执行重启。

  • codeninjia 2019-03-20

    我这边最多发送的数据不会超过100k 短连接的情况是不是不会出现发送失败。
    这个判断我加上吧防止万一。谢谢了哈。回复的好及时哈哈

  • codeninjia 2019-03-20

    再麻烦问下 count($worker->connections) == 0 这个等于0 是指当前进程没有连接进来是吗。那如果一直在处理是不是就一直无法触发了。我是写在onmessage 里面的。最后一发发送send的话。这个值会为空吗。

  • walkor 2019-03-20

    send之后不会为空,close后有可能为空

  • codeninjia 2019-03-21

    @1:那如果加上这个判断的话是不是永不不会触发重启的条件呢?还是这个不要写在onmessage里

  • walkor 2019-03-21

    你可以在onWorkerStart里写个定时器,定时检查

  • codeninjia 2019-03-21

    @1:懂了就是定时检查次进程是否没有新连接进来并且已经处理了指定数量的请求之后就重启这样是吧。

  • walkor 2019-03-21

  • codeninjia 2019-03-21

    想再问下

    $worker->onMessage = function ($connection, $data) {
    global $request_count;
    $request_count++;
    })

    $worker->onWorkerStart = function ($worker) {
    global $request_count;
    Timer::add(10, function () use ($worker, $request_count) {
    if ($request_count > Item\Config::$maxRequest&&count($worker->connections) == 0) {
    // 请求数达到指定数量请求后退出当前进程,主进程会自动重启一个新的进程
    Worker::stopAll();
    }

    });

    };

    //为什么在定时器里取到的$request_count 一直是null呢。

  • walkor 2019-03-21

    onWorkerStart里定义下$request_count = 0;,没赋值是null

  • codeninjia 2019-03-21

    @1:我的意思是我在onmessage ++了定时器 里取值还一直是0呢,我初始值改为0 也一样

  • codeninjia 2019-03-21

    @1:我写错了。我改成这样就行了

    $worker->onWorkerStart = function ($worker) {
    // 将db实例存储在全局变量中(也可以存储在某类的静态成员中)
    global $request_count;
    $request_count=0;
    Timer::add(10, function () use ($worker) {
    global $request_count;
    if ($request_count > Item\Config::$maxRequest&&count($worker->connections) == 0) {
    // 请求数达到指定数量请求后退出当前进程,主进程会自动重启一个新的进程
    Worker::stopAll();
    }

    });

    };

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