关于用gateway做游戏服务端的疑问

OhMangoCat

问题描述

我写一下我的理解。假设我使用创建了十个进程,代码如下:

'gateway' => [
        'handler'     => Gateway::class,
        'listen'      => 'websocket://0.0.0.0:7272',
        'count'       => 10,
        'reloadable'  => false,
        'constructor' => ['config' => [
            'lanIp'           => '127.0.0.1',
            'startPort'       => 2300,
            'pingInterval'    => 25,
            'pingData'        => '{"type":"ping"}',
            'registerAddress' => '127.0.0.1:1236',
            'onConnect'       => function(){},
        ]]
    ],

假如我是用mongodb来处理数据,我是不是应该在onWorkerStart函数里执行

$this->mongo = Db::connection('mongodb');

这里我需要定义一个mongo变量吗?
如果需要,是不是只是为了方便写呢?
这样一共就只会创建十个mongodb长连接对吗。
接下来业务当中我只需要使用

$this->mongo->collection('xxx')

就可以在进程中使用。

假如100个用户同时访问,分别分到十个进程里,每个进程里的十个用户是不是就会按照顺序执行代码。
那如果没有请求的情况下需不需要去维护这个长连接呢。
这样做是使用这套框架的标准做法吗?
如果不是应该怎么做呢?

为此你搜索到了哪些方案及不适用的原因

我的理解是需要在onWorkerStart里用定时器定时去查询mongodb数据。

273 1 0
1个回答

walkor

这里我需要定义一个mongo变量吗?
需要定义一个属性存储mongodb实例

这样一共就只会创建十个mongodb长连接对吗。

假如100个用户同时访问,分别分到十个进程里,每个进程里的十个用户是不是就会按照顺序执行代码。
顺序执行

这样做是使用这套框架的标准做法吗?
标准做法

🔝