game2006go/交接.md
aozhiwei b92410e16b 1
2024-11-27 14:21:57 +08:00

5.7 KiB
Raw Permalink Blame History

编译

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下 3、jwt认证这块目前是调用了node写的一个服务 git clone git@git.kingsome.cn:server/game2006web3new.git cd game2006web3new/server/bin_dev/web3service ./web3service -z1 -n1 -i1 4、必须在dev分支上开发其他的分支因为有之前程序写了一半未并入的后面也没上的功能

如何更新测试服程序

ssh wheel-test.kingsome.cn cd /home/kingsome/pub/game2006go/server/wheelserver git pull make pm2 restart wheelserver_n1_i1

如何更新excel配置表

svn co http://192.168.100.11/svn/kingsome/project/sourcecode/tg_point cd config 测试服-上传配置表.bat pm2 restart wheelserver_n1_i1(在测试服上运行)

调试(dlv测试服上已经安装好)

dlv exec ./wheelserver b xxx.go:lineno r -z1 -n1 -i1 c