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中,使用两个注册地址,也就是两个网关,该如何写业务代码
每次调用前设置正确的 self::$registerAddress