在webman中使用gateway-worker,如何使用多个网关

pengzhen

webman中使用gateway-worker,process.php配置了多个

return [
    'game' => [
        'handler'     => BusinessWorker::class,
        'count'       => cpu_count(),
        'enable'      =>env( 'GAME_GATEWAY_PLUGIN_ENABLE' ) == 1,
        'name' =>'starflower-game-bussiness',
        'constructor' => ['config' => [
            //'eventHandler'    => plugin\webman\gateway\Events::class,
            'eventHandler'    => app\controller\RouterController::class,
            'name'            => 'starflower-game-bussiness', //配置无效
            'registerAddress' => env('GAME_REGISTER_ADDRESS'),
        ]]
    ],
    'chat' => [
        'handler'     => BusinessWorker::class,
        'count'       => cpu_count()*2,
        'enable'      =>env( 'CHAT_GATEWAY_PLUGIN_ENABLE' ) == 1,
        'name' =>'starflower-chat-bussiness',
        'constructor' => ['config' => [
            //'eventHandler'    => plugin\webman\gateway\Events::class,
            'eventHandler'    => app\controller\RouterController::class,
            'name'            => 'starflower-chat-bussiness', //配置无效
            'registerAddress' => env('CHAT_REGISTER_ADDRESS'),
        ]]
    ],

然后新建2个service,分别调用game网关和chat网关发送消息

chatService.php

use GatewayWorker\Lib\Gateway;
class ChatService extends Gateway
{
    /**
     * @var ChatService
     */
    private static $instance;
    public static $registerAddress;

    /**
     * @return ChatService
     */
    public static function get(){
        if (!self::$instance) {
            self::$registerAddress = config('plugin.webman.gateway-worker.process.chat.constructor.config.registerAddress');
            self::$instance = new self();
        }
        return self::$instance;
    }
}

gameservice.php

use GatewayWorker\Lib\Gateway;
class ChatService extends Gateway
{
    /**
     * @var ChatService
     */
    private static $instance;
    public static $registerAddress;

    /**
     * @return ChatService
     */
    public static function get(){
        if (!self::$instance) {
            self::$registerAddress = config('plugin.webman.gateway-worker.process.game.constructor.config.registerAddress');
            self::$instance = new self();
        }
        return self::$instance;
    }
}

当使用chatservice发送消息时,可能会发送给连接到game网关的客户端,看代码,可能是gateway-worker/src/Lib/Gateway.php中的tatic $addresses_cache, $last_update;缓存导致的。如果我想在webmen中,使用两个注册地址,也就是两个网关,该如何写业务代码

88 1 0
1个回答

每次调用前设置正确的 self::$registerAddress

  • 暂无评论
🔝