Discover Packages
github.com/nmsoccer/sgame
module
Version:
v0.0.0-...-0e6f1c7
Opens a new window with list of versions in this module.
Published: Dec 17, 2021
License: GPL-3.0
Opens a new window with license information.
README
README
¶
sgame
A Simple Game Server Framework 一个简单的游戏服务端框架
Features
开发语言 除在进程通信和日志等模块使用了C作为基础库以外,所有的上层逻辑均由go编写,便于使用go标准库的丰富资源
减少依赖 在开发过程中,除了使用本人之前开发的一些基础日志库和进程通信模块由C实现以外,其余内容都基于go标准库的实现,尽量减少第三方库的使用,努力做到可防可控。在第三方上除了对protobuf和goredis的依赖,没有其他多余的库
结构简单 为了方便说明,使用传统的游戏三层架构,连接层,逻辑层,数据层三种进程. 覆盖了网络连接管理,db操作,表格加载等游戏内常见的逻辑,在后续的开发中可以直接集成已有模块进行调用,减少重复开发。同时提供简单的接口和案例,可以方便增加新的功能进程
协议兼容 在server进程之间使用protobuf进行消息序列化,在server与客户端之间使用json编码传输,尽力提供良好的兼容
监控管理 提供一套发布与管理工具,用于多游戏进程的配置管理与业务进程的监控
测试终端 提供了不同语言的CS交互封装库,目前提供了GO,C,JAVA的封装API,同时也编写了对应的简单客户端用于代码演示
WIKI 更多内容请参见WIKI:https://github.com/nmsoccer/sgame/wiki
简单架构
这是一个简单的架构图,主要以各group里的connect_serv,logic_serv,db_serv三层逻辑为核心,框架功能也以这三层的实现为主。同时为表现扩展性这里部署了两组,它们之间通过disp互相通信.
更多的架构说明请参考wiki
环境安装
基础软件
GO
下载页面https://golang.google.cn/dl/ 或者 https://golang.org/dl/ 这里下载并使用go 1.14版本,然后
tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz
修改本地.bashrc export PATH=$PATH:/usr/local/go/bin export GOPATH=/home/nmsoccer/go
PROTOBUF
下载页面https://github.com/protocolbuffers/protobuf/releases 这里选择下载protobuf-all-3.11.4.tar.gz.
解压到本地后./configure --prefix=/usr/local/protobuf; make; make install
修改本地.bashrc export PATH=$PATH:/usr/local/protobuf/bin
REDIS
下载页面https://redis.io/download 这里选择下载redis-5.0.8.tar.gz.
解压到本地后make 然后拷贝src/redis-cli src/redis-server src/redis.conf 到/usr/local/bin.
我们使用redis的主从模式,一主两从,为了方便三个实例都部署到本地,所以创建三个目录 mkdir ~/redis_pool/6600 ~/redis_pool/6601 ~/redis_pool/6602
6600作为主实例
cd ~/redis_pool/6600; cp /usr/local/bin/redis.conf .
编辑redis.conf
搜索requirepass 并新增一行requirepass cbuju
用作sgame使用redis的连接密码
搜索port 6379并修改为port 6600作为监听端口
执行redis_server ./redis.conf &
拉起即可
6601作为从实例1
cd ~/redis_pool/6601; cp ../6600/redis.conf .
编辑redis.conf
搜索并修改port 6601
搜索replicaof 然后添加一行replicaof 127.0.0.1 6600
作为其master
搜索masterauth 然后添加一行 masterauth cbuju
执行redis_server ./redis.conf &
拉起即可
6602作为从实例2
cd ~/redis_pool/6602; cp ../6600/redis.conf .
编辑redis.conf
搜索并修改port 6602
搜索replicaof 然后添加一行replicaof 127.0.0.1 6600
作为其master
搜索masterauth 然后添加一行 masterauth cbuju
执行redis_server ./redis.conf &
拉起即可
如果内存有限亦可以只保持6600一个实例,如此则需后续修改sgame/servers/spush/db_serv.tmpl里的地址为主实例一个,否则会不断尝试重连备机报错
必需库
SGAME安装
这里仍然以手动安装为例
代码结构
下面介绍一下框架的代码目录及其功能
sgame
|-- client
|-- lib
| |-- log
| |-- net
| `-- proc
|-- pic
|-- proc_bridge
| |-- carrier
| | `-- tools
| |-- library
| `-- sgame
|
|-- proto
| |-- cs
| `-- ss
|-- servers
| |-- comm
| |-- conn_serv
| | `-- lib
| |-- db_serv
| | `-- lib
| |-- logic_serv
| | |-- lib
| | |-- table
| | `-- table_desc
| |-- disp_serv
| | `-- lib
| |-- manage_serv
| | |-- html_tmpl
| | `-- lib
| `-- spush
| |-- tmpl
| `-- tools
|
`-- xls_conv
`-- xls
CLIENT
这里主要放置了用于测试功能的客户端文件game_cli.go以及用于压测的press.go
LIB
这里放置了可以供客户端和服务器进程使用的一些公开基础库,目前主要包括:
log
日志库,封装了slog的go包,同时对多协程的日志记录进行了相应处理
net
网络收发的基本协议格式,定义了CLIENT<->SERVER之间数据传输的基本TLV协议格式
proc
服务器进程之间的通信接口,封装了proc_bridge的go包,并提供了相应的API
PIC
这个是图片 不用鸟
PROC_BRIDGE
整合了https://github.com/nmsoccer/proc_bridge 里的proc_bridge组件,其中sgame是为该框架特有的目录,里面主要提供了bridge.cfg配置文件用于配置proc_bridge通信
PROTO
这里用于定制服务器之间,客户端与服务器之间的协议
cs
这里制定客户端与服务器之间的通信协议,使用JSON格式。提供了相应的api.go来进行序列&反序列化
ss
这里制定服务器之间的传输通信协议,使用protobuf3格式。提供了相应的api.go来进行序列&反序列化
SERVERS
这里提供了框架的核心业务进程和部署工具
comm
服务器进程所依赖的公共库文件,包括用于tcp连接的tcp_serv.go;用于redis通信的redis.go等
conn_serv
用于维护客户端连接的接入管理进程,使用tcp协议接入,为每个客户端连接部署一个协程来进行管理。进程main文件为conn_serv.go
conn_serv/lib
用于保存conn_serv进程使用的库文件
logic_serv
用于负责处理游戏主要逻辑的业务进程。进程main文件为logic_serv.go
logic_serv/lib
用于保存logic_serv进程使用的库文件
logic_serv/table
业务进程经常使用的资源文件,由excel定义转化为json格式存储
logic_serv/table_desc
用于描述业务进程所使用资源文件(json格式)的go文件模板
db_serv
用于负责框架与redis数据库的读写进程。进程main文件为db_serv.go
db_serv/lib
用于保存db_serv进程使用的库文件
disp_serv
用于不同logic组之间的消息互通
disp_serv/lib
用于保存disp_serv进程使用的库文件
manage_serv
用于负责管理各具体业务进程的管理进程。进程main文件为manage_serv.go
manage_serv/lib
用于保存manage_serv进程使用的库文件
manage_serv/html_tmpl
用于管理页面的模板文件
SPUSH
之前介绍过的SPUSH文件部署工具,其中tmpl用于各业务进程配置所使用的模板
XLS_CONV
用于业务进程所使用的资源转换工具,将excel文件转换为相关的json文件。 具体使用可以参考https://github.com/nmsoccer/xlsconv
更多说明
更多介绍请参阅页面https://github.com/nmsoccer/sgame/wiki
Expand ▾
Collapse ▴
Directories
¶
Click to show internal directories.
Click to hide internal directories.