请教,游戏类开发的问题

seiven

关于要游戏类项目结构 我是这样想的
通过GatewayWorker做网关
通过workerman做游戏服和其他公用服(如登录或其他数据服等)
通过在网关中注册消息事件,根据消息事件来分发消息到各个worker服

有几个问题请教

  1. Gateway事件映射和分发时通过什么方式比较好
  2. 单个worker多个进程时 在worker内部使用全局变量共享单服数据
  3. 通过globaldata做多个worker之间的数据共享 是否合适

万分感谢,想做游戏服,在考虑整个项目的结构问题, 望给予一些建议指导
多谢

1093 3 1
3个回答

seiven

1个 GatewayWorker
多个BusinessWorker 或 单个 BusinessWorker 处理消息 分发到 多个 workerman worker 中

  • seiven 2022-06-10

    因为是 单网段 多子游戏的 一个结构 请教 @walkor

walkor

GatewayWorker提供的接口大部分是广播类接口,例如sendToUid()是向所有gateway进程发起请求,客户端一个请求可能会裂变成gateway进程的多个请求调用,每秒1000个请求到服务端可能会裂变成上万个gateway进程调用,这种每秒几千次大量内部接口调用特别频繁时会消耗很大的资源。所以GatewayWorker这种架构适合做维持大量连接,但是内部接口调用不是特别频繁的应用,例如聊天、物联网、棋牌类游戏。

即时战斗类的通讯特别频繁的适合直接workerman来做。

关于数据共享,主要看进程对共享数据操作有多频繁,比如每秒上万次读写,多进程的性能反而大大降低,这种情况单进程性能更好,例如这个帖子 https://www.workerman.net/q/523 。如果通讯不频发建议redis。

不清楚你们做的是什么游戏。GatewayWorker + workerman的架构感觉有些复杂。

  • seiven 2022-06-10

    棋牌游戏的话 想走一个网关 进来 根据消息 分发到不同子游戏 每个子游戏用单独的worker来做 这种情况可行不

  • seiven 2022-06-10

    数据贡献棋牌游戏类的 相对都不频繁 redis是可以解决了的 主要是消息流转这个过程 用户链接到网关 进入某个游戏桌子 需要分发到具体的游戏业务逻辑去处理 子游戏与子游戏之间 可以独立启动和维护 这样相互隔离

  • seiven 2022-06-10

    举例:
    某游戏A服 对积分做一个操作 是需要发给单独的 用户数据服B处理 游戏服A 只处理业务逻辑 那A 和 数据处理服B 如何通信呢

  • walkor 2022-06-10

    A服 B服 直接rpc调用就行了

  • seiven 2022-06-10

    那 从 businessWorker 到 游戏服 也直接 rpc 就可以了哇~

seiven

类似这种 大佬

  • seiven 2022-06-10

    gateway 后期可以横向扩展 businessWorker 也可以横向扩展 单个游戏服理论上分布式部署是可以承载的

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