From 75f8cc259da230f27509d57d5483016557dd6a20 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 27 Nov 2024 13:12:58 +0800 Subject: [PATCH] 1 --- 交接.md | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 交接.md diff --git a/交接.md b/交接.md new file mode 100644 index 00000000..ae244502 --- /dev/null +++ b/交接.md @@ -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下