Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

module 可否增加一个“启动后” 的事件通知? #190

Open
cupen opened this issue Nov 22, 2021 · 5 comments
Open

module 可否增加一个“启动后” 的事件通知? #190

cupen opened this issue Nov 22, 2021 · 5 comments

Comments

@cupen
Copy link

cupen commented Nov 22, 2021

我有个游戏项目用了 leaf ,另加了分布式通信层和服务发现机制,需要在进程里的服务(module)全部就绪后注册到外部服务。但因为在 OnInit 阶段服务还没有全部启动完毕,所以目前我是这样做的:

go func() {
	leaf.Run(
		xxx.Module,
		yyy.Module,
		xxx.Module,
	)
}()
// 等待就绪.... 
time.Sleep(100*time.Milisecond)
// register xxx.Module into blahblah...  

这样可行,但比较看脸(实际启动时间会变的,比如又加了新功能),不太好用。
故而有点新想法,比如 module 可否有个启动后的 OnXXX 调用?
延伸一下,甚至可以细分为几个阶段:启动前、启动后、停止前、停止后。

以上个人愚见,欢迎讨论。

@YiuTerran
Copy link

你在全局加一个waitgroup,各模块完毕后-1,主协程这里等waigroup不就OK了…

@cupen
Copy link
Author

cupen commented Jan 18, 2022

你在全局加一个waitgroup,各模块完毕后-1,主协程这里等waigroup不就OK了…

…… 得先有每个 module 的 启动后 这一事件,才能 wg -1。
目前的 Module 有以下几个阶段可以插入代码,哪个可以当作 “启动后”?

  1. OnInit
  2. OnDestroy
  3. Run

@cupen
Copy link
Author

cupen commented Feb 24, 2023

具体点说,就是 Module 接口需要加一个 OnStarted ,用于执行“启动后” 的逻辑。

leaf/module/module.go

Lines 10 to 14 in af71eb0

type Module interface {
OnInit()
OnDestroy()
Run(closeSig chan bool)
}

这个 “启动后” ,需要在 cluster.Init() 之后执行,因为这之后才能对外宣布“本服务已就绪“。

leaf/leaf.go

Lines 24 to 36 in af71eb0

log.Release("Leaf %v starting up", version)
// module
for i := 0; i < len(mods); i++ {
module.Register(mods[i])
}
module.Init()
// cluster
cluster.Init()
// console
console.Init()

@cupen
Copy link
Author

cupen commented Feb 24, 2023

再不济实现个 leaf.Start,执行完启动过程后不要阻塞,让我能在之后执行代码就行。

如果 leaf 未来要实现 cluster 模块,服务发现机制是必要的,这就需要预留出 启动后 的执行代码 。
@name5566

@YiuTerran
Copy link

这框架太久没维护了,你直接fork修改呗( ̄▽ ̄")

我记得原版模块是顺序启动的,理论上你可以单独加一个模块放在最后面,专门用来注册/取消注册到注册中心

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants