topwo / ggb-game-server

一个基于nodejs的分布式游戏服务器

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

由于这个框架用了Koa框架去做底层,包括网络底层都是用插件,感觉太累赘了,所以打算重写一套不含插件的纯粹开源的架构,会合并到这个项目的分支里,目前这个主分支的框架项目还存在一些问题,该框架已在另一个手游项目开发中使用开源,修复了相关问题,可以前往项目card-server查看

ggb-game-server

该项目是一个基于Node.js平台中koa框架开发完成的分布式游戏服务器框架,对应有一个U3D客户端框架ggb-game-client

项目说明

架构图

基础服务器

  • web-server - Web服务器
    • 游戏前后台网站放置
    • 游戏在线更新资源下载
  • http-server - Http服务器
    • 管理游戏登录/注册/选择区服等http请求处理
    • 管理游戏前后台网站所需http请求
  • center-server - 中心服务器
    • 负责框架内各服务器之间数据的通信转发
  • connect-server - 网关服务器
    • 管理游戏客户端建立的socket连接
  • game-server - 游戏逻辑服务器
    • 管理具体的游戏逻辑

工作流

  • 客户端进入游戏前的登录、选择角色等HTTP请求,发送至http-server实现通信
  • 进入游戏时将发送Token值至connect-server进行验证,验证成功将建立socket连接
  • 游戏业务逻辑将请求至connect-server,然后通过center-server转发至game-server,在game-server处理具体逻辑或者再次转发至战斗、聊天等更细分的游戏服务器,再通过center-server回发至connect-server,最后发送至客户端完成通信。

入门指南

这些说明将为您提供项目的副本,并在您的本地机器上运行,用于开发和测试。有关如何在活动系统上部署项目的说明,请参阅部署。

环境依赖

  • 发布环境无要求,开发环境为 Windows

  • 项目运行平台为 node.js

  • 数据库使用 mysqlredis

  • 工具类采用 bat批处理、python2 编写

安装

  1. 通过github下载项目
    https://github.com/GrayGuardian/ggb-game-server.git
  2. 进入项目文件夹,命令行安装依赖库 npm i
  3. mysql数据库运行./tool/db/db.sql数据库语句创建表结构及数据
  4. 安装protobuf-python
  • 命令行进入 ./tool/protobuf/plugins/protobuf-python
  • 输入命令 python setup.py build python setup.py install
  • 双击运行 ./tool/protobuf/pb.bat 无报错则表示安装成功
  1. 修改项目配置
  • 服务器配置:./common/config/server.json
  • redis数据库配置:./common/config/redis.json
  • mysql数据库配置:./common/config/mysql.json
  1. 修改工具配置
  • 协议导出批处理程序 ./tool/protobuf/pb.bat
  • 数据模板导出python程序 ./tool/template/build.py

运行测试

###快速启动

  • 保证 redis 与 mysql 数据库成功启动连接
  • 双击 ./start.bat 批处理程序

###单个启动

  • 命令行输入 node ./[server-name]/app [*server-order]
  • 例如:node ./web-server/appnode ./game-server/app 0

此处仅展示如何快速启动项目测试,具体配置方式请看下方项目部署

项目部署

  • 双击 ./tool/protobuf/pb.bat 导出协议

  • python运行 ./tool/template/build.py 导出数据模板

  • 修改 ./common/config/server.json 字段Master中的服务器配置为部署环境IP与端口号

  • 修改 ./common/global.js 字段名 global.PRO_ENV = 'Master';

  • 若需要使用./start.bat快速启动所有服务器,则修改其中的SERVER_CONFIG.Type SERVER_CONFIG.Count

最后启动所有服务器,即可完成部署

内置

抗压扩容

  1. 添加服务器
  • 部署更多的center-serverconnect-servergame-server
  • 将场景、聊天等数据量交互大的游戏逻辑独立出scene-serverchat-server等服务器,通过center-server转发,与game-server进行通信处理,再转发至connect-server,继而与客户端完成通信
  1. 配置更新
  • 更新服务器配置:./common/config/server.json
  • 负载均衡管理:./common/config/server_config.js中的get[ServerName]Config

常用API

  1. rpc_mgr: 封装一些服务器之间的rpc业务逻辑通信,是主要的跨服通信手段

  2. center_mgr: 通过中心服务器转发数据至其他服务器

  • rpc 转发

  • rpcAsync 异步转发

  1. socket_channel:管理socket连接分组,批量回发等,每个socket连接时,均会添加分组uid=[uid] aid=[aid] pid=[pid] [socketid],因此也用于单用户回发,仅存在于connect-server,一般通过rpc_mgr封装使用
  • send 发送数据

  • kick 踢出用户 可携带一个错误代码

  • genError 发送一个逻辑层错误代码 如密码错误等

  1. [Model]:数据模型,可以有效的减少数据库读写压力,实体存在于game-servermodel_mgr中,一般通过rpc_mgr封装使用,可保证所有服务器数据模型一致

    • [Model].baseInfo 基础数据 可通过get_[field] set_[field]来读写

    • [Model].upDBToData 从数据库更新缓存数据

    • [Model].upDataToDB 从缓存更新数据库数据

    • [Model].upClientData 更新数据到客户端

  2. tpl:管理模板类

About

一个基于nodejs的分布式游戏服务器


Languages

Language:JavaScript 72.8%Language:C++ 18.4%Language:Lua 5.8%Language:Python 1.7%Language:C 1.0%Language:Shell 0.2%Language:Batchfile 0.2%Language:HTML 0.0%Language:Makefile 0.0%