gate模块能否感知某个模块挂了
发布于 4 个月前 作者 Autismer 420 次浏览 来自 问答

Login模块有两个进程 Login001和Login002,现在Login001进程死了,Gate模块是否可以感应到Login001挂掉了, 并且不再向这个模块分发消息?

5 回复

不能感知,要实现这个功能需要额外开发,比如用etcd做一个配置中心

最近有维护一个jarekzha-master分支,上面有你说的需求。目前还没有合并到master上,可以先看看。

增加一个用于做服务器当前运行状态的缓存配置。 rpc中配置如下项目后开启功能:

"Rpc": {
    // 会话状态缓存的redis url
    "SessionRedisUrl":"redis://@127.0.0.1:6379/1"
},

用于保存每个模块的状态信息:

type ServerStatus struct { Running bool // 正在运行中 LoadHash int64 // 负载哈希值:由上层应用计算定义的负载程度,值越大,表示负载越高 } ,并基于此让上层逻辑做基于负载的动态调度。调整默认调度函数,增加对指定模块是否真正运行的判断。 并增加如下函数用于上层的调用: /* 获取指定类型的运行中的所有模块

/ func GetRunningServersByType(app module.App, moduleType string) []module.ServerSession / 获取指定类型的运行中的负载最低模块 */ func GetMinLoadRunningServerByType(app module.App, moduleType string) module.ServerSession app.go里面的默认路由也有相应处理。

好的 多谢 我研究一下

@jarekzha 兄弟 你这个测试了吗 ? 关闭服务器 会出现 panic: invalid RPCServer 在你存 状态的之前 rpc 已经被关闭了。。。。。。状态存不进去啊

对jarekzha-master分支目前还没有考虑没有配置master模块的情况,会有问题

回到顶部