Alvin 50e84ecea8 Revert "update 完善用户登录时写入RoleId" 10 tháng trước cách đây
..
internal 993f502d07 Revert "update 完善添加管理员时角色id校验" 10 tháng trước cách đây
nodes 50e84ecea8 Revert "update 完善用户登录时写入RoleId" 10 tháng trước cách đây
robot_client 3c852f97f8 版本更新 10 tháng trước cách đây
README.md b20bfb08e7 new 11 tháng trước cách đây
build_go_protocol.bat b20bfb08e7 new 11 tháng trước cách đây
build_js_protocol.bat b20bfb08e7 new 11 tháng trước cách đây
launch.json b20bfb08e7 new 11 tháng trước cách đây

README.md

分布式多节点示例

  • 建议在windows环境进行调试(示例自带nats-server.exe),其他操作系统需自行搭建nats server
  • 本示例没有使用数据库,进程重启会还原所有数据
  • 客户端演示分为两种:
    • robot_client 为go实现的游戏压测客户端,使用tcp/protobuf协议
    • nodes/web/view/ 为h5实现的游戏客户端,使用websocket/protobuf协议
  • 欢迎开发者一起入群讨论,构建更好的demo

要求

  • 安装GO版本 >= 1.17
  • 安装nats.io >= 2.0

配置

  • profile文件在examples/config/profile-gc.json
  • 策划配置文件在 examples/config/data/

操作步骤

克隆

  • git clone https://github.com/mhaya.git
  • 或者点击github.com页面的code按钮Download zip下载源码包

调试

0x00 打开项目

打开项目源码,找到examples/demo_game_cluster目录

0x01 启动nats server

nats为高性能的分布式消息中间件,详情可通过https://github.com/nats-io/nats-server 进行了解
本框架中所有节点都基于nats进行消息通信
单机版nats执行程序在examples/3rd/nats-server目录中
正式环境请使用集群nats-streaming-server进行部署 https://github.com/nats-io/nats-streaming-server

  • 操作步骤:
  • 运行examples/3rd/nats-server/run_nats.bat单机版
  • 窗口显示Listening for client connections on 0.0.0.0:4222 代表nats启动成功,nats默认监听4222端口

0x02 启动参数配置

找到exmaples/demo_game_cluster/nodes/main.go,所有节点都从main.go启动
启动参数请参考launch.json文件

0x03 启动master节点

master节点主要用于实现最基础的发现服务,基于nats构建
正式环境也可配置为etcd方式提供发现服务
相关的代码在examples/demo_game_cluster/master/目录

  • 启动参数:
    • master --path=./examples/config/profile-gc.json --node=gc-master

0x04 启动center节点

center节点目前主要用于处理帐号相关的业务或全局唯一的业务

  • 启动参数:
    • center --path=./examples/config/profile-gc.json --node=gc-center

0x05 启动web节点

web节点主要对外提供一些http的接口,可横向扩展,多节点部署
目前用于开发者帐号注册、区服列表、sdk登陆/支付回调、验证token生成等业务

  • 启动参数:
    • web --path=./examples/config/profile-gc.json --node=gc-web-1

0x06 启动gate节点

gate节点为游戏对外网关,可横向扩展,多节点部署
主要用于管理客户端的连接、消息路由与转发

  • 启动参数:
    • gate --path=./examples/config/profile-gc.json --node=gc-gate-1

0x07 启动game节点

game节点为具体的游戏逻辑业务,根据业务需求可多节点部署
在分服的游戏中可提供游戏内的各种逻辑实现

  • 启动参数:
    • game --path=./examples/config/profile-gc.json --node=10001

测试

  • 使用go实现客户端,通过tcp协议连接gate网关进行压力测试
  • 使用h5实现客户端,通过websocket协议连接gate网关进行功能的展示

启动压测机器人

  • 找到examples/demo_game_cluster/robot_client/main.go 文件,并执行
  • 机器人执行逻辑为:注册帐号登陆获取token连接网关用户登录游戏服查看角色创建角色进入角色
  • 默认设定为创建1000个帐号,可自行调整maxRobotNum参数进行测试
  • 执行完成后,从game节点的Console可以查看到onlineCount = 10000字样,表示1万帐号已经进入游戏

启动h5客户端

  • 直接访问http://127.0.0.1,按照界面步骤提示操作

源码讲解

  • internal 内部业务逻辑

    • code 定义一些业务的状态码
    • component 组件目录,
      • check_center组件, 用于在启动前节点先检查center节点是否已启动
    • constant 一些常用定义
    • data 策划配表包装的struct,用于读取../../config/data目录的策划配表
    • event 游戏事件
    • guid 生成全局id
    • pb protobuf生成的协议结构
    • protocol protobuf结构定义目录
    • rpc 跨节点rpc函数封装
    • session_key 一些session相关的常量定义
    • token 登录token逻辑,包含生成token、验证token
    • types 各种自定义类型封装,方便struct从配置文件、数据库读取数据时进行序列化、反序列化
  • nodes 分布式节点目录

    • center节点
    • game 节点
    • gate 节点
    • master 节点
    • web 节点(为了演示方便,包含了h5客户端)
  • robot_client 压测机器人(tcp/protobuf协议)

  • build_protocol.bat 生成protobuf结构代码到internal/pb/目录

运行截图

screenshot