plugin.md
1.41 KB
热更golang有状态服务
- golang是有状态的
- 数据+逻辑代码分离
- 主要热更的是逻辑代码
启用插件
- 启用插件, 配置文件 conf.yaml, 填入插件.so文件的路径
server_game: plugin_path: "./bin/plugin.so" mongo: <<: *default-mongo dbname: "game"
- 编译程序 & 插件.
shell $ make plugin
- 程序和插件需要同一个golang的环境。
- golang对同一个插件只能加载一次。可以修改.so文件名字 + 软连接的方式来处理
写插件代码
插件中的代码主要是对线上程序 协议=>逻辑
的热更.
比如我们要修改游戏服务协议号为1
的逻辑。 则在cmd/gameserver/plugin/plugin.go
文件中修改。
- 在函数
GetActionMap
中增加一行am[uint32(1)] = HotRpc
增加函数
HotRpc
func HotRpc(msg components.IMessage) (int32, interface{}) { return 0, nil }
编译插件 & 可以参考Makefile:plugin
IMGTIME := $(shell date "+%G%m%d_%H%M%S") pname = plugin-$(IMGTIME).so plugin: cd bin && rm -rf ./plugin*.so && cd - go build -race --buildmode=plugin -o bin/$(pname) cmd/gameserver/plugin/*.go cd bin && ln -s $(pname) plugin.so && cd -
把插件放到指定位置, 并给游戏服发送热更指令。可以参考Makefile:regame
regame:plugin lsof -i:8850 | grep "agent" | grep -v grep | awk '{print $$2}' | xargs -I {} kill -USR1 {}