This commit is contained in:
aozhiwei 2024-11-27 13:12:58 +08:00
parent 60c9abeb0c
commit 75f8cc259d

150
交接.md Normal file
View File

@ -0,0 +1,150 @@
# 编译
1、git clone git@git.kingsome.cn:server/game2006go.git
2、cd game2006go
3、git submodule init
4、git submodule update
5、cd server\wheelserver
6、make
# 运行
1、cd bin/wheelserver/bin
2、./wheelserver -z1 -n1 -i1
# 给客户端的的文档
1、外网查看路径https://doc.kingsome.cn/game2006api/apidoc/#api-AAWheel
2、获取文档代码git clone git@git.kingsome.cn:server/game2006api.git
3、切换到hjb分支 git checkout hjb
4、文档文件doc/AAWheel.py
5、修改好文档后回到项目根目录
5、运行mydoc -p(注意这个需要再服务器上运行)
生成给客户端的doc html文档
1、连接login-test.kingsome.cn
2、cd /data/apps/game2006api_dev
3、git pull
4、运行命令mydoc -p
# 项目代码结构构成
root
|
|--third_party
|--q5(基础库相当于core)
|--f5(基础框架相当于framework)
|--server
|
|--jccommon(公司级公共代码)
|
|--wheelserver(转盘活动server)
|
|--api(控制器)
|
|--app(启动类)
|
|--common(公共数据结果定义)
|
|--constant(常量定义)
|
|--event(事件)
|
|--global(全局变量定义)
|
|--initialize(模块初始化注册)
|
|--middleware(中间件)
|
|--model(数据模型)
|
|--mt(mt->meta table配置表封装)
|
|--mtb(配置表基础和原始json配置一一对应有nodejs脚本根据proto/mt.proto定义生成)
|
|--proto(长连接protobuf定义和配置表定义)
| |
| |--mt.proto(配置表定义)
|
|--router(路由管理)
|
|--service(服务)
|
|--session(会话管理)
|
|--vo(view object)
# 配置表管理
1、所有的配置文件统一使用json
2、在proto/mt.proto里定义配置表结构
3、定义好之后在server/wheelserver目录下运行node ../../tools/pbtools/app.js
4、pbtools会在mtb目录下生成mtb.auto_gen.go
5、在mt目录下添加对应的表封装器
6、在mt/export.go下注册配置表
7、表封装器的访问是线程安全的
8、配置表的底层逻辑有f5/metatable.go里实现
# f5/metatable.go提供如下功能
1、分为两种情况
IdMetaTable: 有id构成主键(如果未定义主键则会生成自增id作为主键)提供函数GetById获取配置表记录
NameMetaTable: 由字符串构成主键,提供函数GetByName获取配置表记录
2、外部获取配置表里的记录
3、加载顺序
先把所有的json都加载进来
调用Table的PreInit1
对每条记录调用封装器的Init1、Init2、Init3实现对多轮初始化
调用Table的PostInit1
# 启动参数
采用zni模式: -z1 -n1 -i1
z:区域
n:节点
i:实例
其中同一个node表示在同一个机房可以内网通信不同的node之间无法直接通信
# 存储
1、目前只支持mysql
# q5
algorithms.go 通用排序类
sysutils.go文件io时间等工具函数
convert.go类型转换
functional.go 函数式编程(用到毕竟少未验证)
httpcli.go: http client
listhead.go: linux内核list_head.h模仿
mysql.go: mysql访问类(实际上一般项目不会直接用这个类用f5的dbpool替代)
password.go 密码生成(未验证)
queue.go: 高效的线程安全队列
random.go: 随机字符串生成
redis.go redis访问(未写完)
reflect.go 反射
strutils.go字符串处理工具函数
sync.go: 线程安全的map
timer.go: 抽象的时间轮定时器(linux内核定时器)
timerlist.go: 抽象的定时器数据结构
types.go: 数据类型定义
uuid.go: 雪花算法uuid实现
# f5
app.go: 框架级app类实现
async_task.go: 异步任务(主线程,长连接项目使用)
constant.go: 常量定义
constant_unix.go常量定义(linux/unix系统)
constant_windows.go常量定义(windows系统)
dataset.go: mysql数据集
dbfilter.go: mysql查询过滤器
dbpool.go: mysql访问层(混合了js style和gostyle,这块代码以后的混乱多个项目用到了跑着没啥问题也就没重构)
godbpool.go: mysql访问层(因为dbpool.go的混乱独立出了go style)
httpclimgr.go http client
lock_async_task.go: 带锁的异步问题(多线程)
metatable.go: json配置表读取
msgqueue.go: 进程内消息队列
prototils.go: protobuff工具函数
strutils.go: 字符串处理工具函数
syslog.go: 日志
sysutils.go: 工具函数
sysutils_unix.go: 工具函数(linux/unix)
sysutils_windows.go: 工具函数(windows)
tglog.go: 大数据埋点日志
timer.go: 定时器(主线程下运行,线程不安全)
types.go: 类型定义
# 注意事项
1、f5目录下某些函数的线程安全问题(因为已开始是为长连接准备的,可能有些地方未考虑到)
2、代码风格并未按golang官方的规范来比如this、包的风格假设了包都在main下