对安全关服的支持
前言
我们通常使用kill
命令去关闭一个,在单进程序中,程序结尾一般都会有收尾的关闭动作。skynet
并没有对收尾动作做太多文章,对于skynet.abort()
也只是粗暴的关闭掉所有服务,清除掉所有未处理的消息。
但是在实际应用开发中,我们通常需要做一个收尾处理,比如orm
缓存的修改进行同步、把在线的玩家都踢出。
实现方式
对于skynet
,不太好依赖信号去处理,信号那需要阻塞等待所有服务都完成收尾动作。我想到的另一个方案是依赖make/script/stop.sh
发送一个shutdown
命令到contriner_mgr
,contriner_mgr
再下发shutdown命令
到所有服务,关闭顺序为先启动后关闭,因为先启动的服务一般都被后启动的服务依赖,一直到所有服务都执行完shutdown
流程,stop.sh
脚本才会执行kill命令,确保安全关服。
业务层对接处理
只需要引入local skynet_util = require "skynet-fly.utils.skynet_util"
模块,增加对应方法就行。
1 |
|
对安全关服的支持
https://huahua132.github.io/2023/10/12/skynet_fly_word/word_2/G_shutdown/