gatewayworker在events的onmessage回调中如何获取到worker进程

whe74120

请问各路大神,使用gatewayworker,在events的onmessage回调中如何获取到worker进程呢?
我想把业务处理中的定时器放在某个单独的进程上执行,该怎么处理呢

阅读 1183
4个回答

blogdaren

1、Events的每一个 onXXX 回调代表每一个独立的业务进程;
2、如果只想在某个单独的进程上运行,样板代码为:

class Events
{
    public static function onWorkerStart($worker)
    {
        //比如只给0号进程设置定时器
        if($worker->id === 0)
        {
            Timer::add(1, function(){
               //业务逻辑
            });
        }
    }
}
  • 暂无评论
whe74120

我想在onMessage中使用

if($worker->id === 0)
{
    Timer::add(1, function(){
        //业务逻辑
    });
}

但是这个worker 怎么来的呢

  • 暂无评论
whe74120

[attach]2465[/attach]
这个$worker 怎么传进来呢 在onworkerstart中你那样写没问题啊 但在onmessage中就不行了

  • 暂无评论
blogdaren

onMessage 中需要间接来玩:
1、先给Events引入一个属性如:  static public $worker = null ;
2、在onWorkerStart 中: 

public static function onWorkerStart($worker)
{   
    empty(self::$worker) && self::$worker = $worker;
} 

3、然后 onMessage 中就可以通过  self::$worker->id  拿到  进程编号;