GatewayWorker 多个$worker->count问题

嘻嘻哈哈

我在start_businessworker.php设置为 $worker->count=2。
 
然后在 Event.php onWorkerStart中编写 第一个进程的业务逻辑代码,另一个进程没有编写任何代码,是不是另一个进程这样就没什么作用了。

// bussinessWorker 进程
$worker = new BusinessWorker();
// worker名称
$worker->name = 'YourAppBusinessWorker';
// bussinessWorker进程数量
$worker->count = 2;
// 服务注册地址
$worker->registerAddress = '127.0.0.1:1510';

// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START')) {
    Worker::runAll();
}
class Events
{

    public static function onWorkerStart($businessWorker)
    {
        if ($businessWorker->id == 0) {
            //编写业务逻辑
        }
2943 4 0
4个回答

abcde123456

是的

  • 嘻嘻哈哈 2019-08-22

    那我要处理大量的业务逻辑,要查询数据库等,并且推送给相关客户端。只在那一个进程里面写,这样会不会导致workerman堵塞,甚至异常。

嘻嘻哈哈

那我要处理大量的业务逻辑,要查询数据库等,并且推送给相关客户端。只在那一个进程里面写,这样会不会导致workerman堵塞,甚至异常。

  • abcde123456 2019-08-22

    不会堵塞, bussinessWorker进程执行一次然后结果交给gateway去推送

th

超出一定量的业务逻辑一个进程肯定撑不住,会堵塞,数据库查询不是异步更会堵塞。但为什么不多进程???

  • 嘻嘻哈哈 2019-08-22

    你的意思是,把业务逻辑拆分出来,部分业务逻辑对应一个进程。是这样吗?

  • th 2019-08-22

    这样是可以的,简单的做法是逻辑不拆分,但同时运行多个

  • 嘻嘻哈哈 2019-08-22

    @th如果逻辑不拆分,同时运行4个进程,那这样岂不是更浪费服务器资源。如果是这种模式的话,相同逻辑就要执行4次!我用定时器从数据库取出数据,然后推送给相关客户端,这样就会推送4次相同结果的数据。我理解的是这样的,不知道对不对。

  • th 2019-08-22

    有人要吃蛋炒饭,要每个厨师都给他做就是同时做了4份,但他只要一份就行了

blogdaren

1、若业务阻塞就会导致进程阻塞,比如查询数据库这种外部IO,如果执行缓慢就会导致进程挂起,题主描述很符合繁重业务场景,所以应该再另起一组任务集群异步处理业务。
2、应该用多进程模型更合理。

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