关于要游戏类项目结构 我是这样想的 通过GatewayWorker做网关 通过workerman做游戏服和其他公用服(如登录或其他数据服等) 通过在网关中注册消息事件,根据消息事件来分发消息到各个worker服
有几个问题请教
万分感谢,想做游戏服,在考虑整个项目的结构问题, 望给予一些建议指导 多谢
1个 GatewayWorker 多个BusinessWorker 或 单个 BusinessWorker 处理消息 分发到 多个 workerman worker 中
因为是 单网段 多子游戏的 一个结构 请教 @walkor
GatewayWorker提供的接口大部分是广播类接口,例如sendToUid()是向所有gateway进程发起请求,客户端一个请求可能会裂变成gateway进程的多个请求调用,每秒1000个请求到服务端可能会裂变成上万个gateway进程调用,这种每秒几千次大量内部接口调用特别频繁时会消耗很大的资源。所以GatewayWorker这种架构适合做维持大量连接,但是内部接口调用不是特别频繁的应用,例如聊天、物联网、棋牌类游戏。
即时战斗类的通讯特别频繁的适合直接workerman来做。
关于数据共享,主要看进程对共享数据操作有多频繁,比如每秒上万次读写,多进程的性能反而大大降低,这种情况单进程性能更好,例如这个帖子 https://www.workerman.net/q/523 。如果通讯不频发建议redis。
不清楚你们做的是什么游戏。GatewayWorker + workerman的架构感觉有些复杂。
棋牌游戏的话 想走一个网关 进来 根据消息 分发到不同子游戏 每个子游戏用单独的worker来做 这种情况可行不
数据贡献棋牌游戏类的 相对都不频繁 redis是可以解决了的 主要是消息流转这个过程 用户链接到网关 进入某个游戏桌子 需要分发到具体的游戏业务逻辑去处理 子游戏与子游戏之间 可以独立启动和维护 这样相互隔离
举例: 某游戏A服 对积分做一个操作 是需要发给单独的 用户数据服B处理 游戏服A 只处理业务逻辑 那A 和 数据处理服B 如何通信呢
A服 B服 直接rpc调用就行了
那 从 businessWorker 到 游戏服 也直接 rpc 就可以了哇~
类似这种 大佬
gateway 后期可以横向扩展 businessWorker 也可以横向扩展 单个游戏服理论上分布式部署是可以承载的
1个 GatewayWorker
多个BusinessWorker 或 单个 BusinessWorker 处理消息 分发到 多个 workerman worker 中
因为是 单网段 多子游戏的 一个结构 请教 @walkor
GatewayWorker提供的接口大部分是广播类接口,例如sendToUid()是向所有gateway进程发起请求,客户端一个请求可能会裂变成gateway进程的多个请求调用,每秒1000个请求到服务端可能会裂变成上万个gateway进程调用,这种每秒几千次大量内部接口调用特别频繁时会消耗很大的资源。所以GatewayWorker这种架构适合做维持大量连接,但是内部接口调用不是特别频繁的应用,例如聊天、物联网、棋牌类游戏。
即时战斗类的通讯特别频繁的适合直接workerman来做。
关于数据共享,主要看进程对共享数据操作有多频繁,比如每秒上万次读写,多进程的性能反而大大降低,这种情况单进程性能更好,例如这个帖子 https://www.workerman.net/q/523 。如果通讯不频发建议redis。
不清楚你们做的是什么游戏。GatewayWorker + workerman的架构感觉有些复杂。
棋牌游戏的话 想走一个网关 进来 根据消息 分发到不同子游戏 每个子游戏用单独的worker来做 这种情况可行不
数据贡献棋牌游戏类的 相对都不频繁 redis是可以解决了的 主要是消息流转这个过程 用户链接到网关 进入某个游戏桌子 需要分发到具体的游戏业务逻辑去处理 子游戏与子游戏之间 可以独立启动和维护 这样相互隔离
举例:
某游戏A服 对积分做一个操作 是需要发给单独的 用户数据服B处理 游戏服A 只处理业务逻辑 那A 和 数据处理服B 如何通信呢
A服 B服 直接rpc调用就行了
那 从 businessWorker 到 游戏服 也直接 rpc 就可以了哇~
类似这种 大佬
gateway 后期可以横向扩展 businessWorker 也可以横向扩展 单个游戏服理论上分布式部署是可以承载的