Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RegisterService ¶ added in v0.5.5
func RegisterService[S Service](service S) S
RegisterService 注册服务
func RunDimensions ¶ added in v0.5.4
RunDimensions 运行维度
Types ¶
type Block ¶ added in v0.5.4
type Block interface { Service // OnBlock 阻塞进程 OnBlock() }
Block 标识模块化服务为阻塞进程的服务,当实现了 Service 且实现了 Block 接口时,模块化应用程序会在 Service.OnMount 阶段完成后执行 OnBlock 函数
该接口适用于 Http 服务、WebSocket 服务等需要阻塞进程的服务。需要注意的是, OnBlock 的执行不能保证按照 Service 的注册顺序执行
type Dimension ¶ added in v0.5.4
type Dimension[Owner any] interface { // OnInit 服务初始化阶段,该阶段不应该依赖其他任何服务 OnInit(owner Owner) error // OnPreload 预加载阶段,在进入该阶段时,所有服务已经初始化完成,可在该阶段注入其他服务的依赖 OnPreload() error // OnMount 挂载阶段,该阶段所有服务本身及依赖的服务都已经初始化完成,可在该阶段进行服务功能的定义 OnMount() error }
Dimension 维度接口
- 维度与服务的区别在于,维度是对非全局性的服务进行抽象,例如:依赖特定游戏房间的局内玩家管理服务
type Service ¶
type Service interface { // OnInit 服务初始化阶段,该阶段不应该依赖其他任何服务 OnInit() // OnPreload 预加载阶段,在进入该阶段时,所有服务已经初始化完成,可在该阶段注入其他服务的依赖 OnPreload() // OnMount 挂载阶段,该阶段所有服务本身及依赖的服务都已经初始化完成,可在该阶段进行服务功能的定义 OnMount() }
Service 模块化服务接口,所有的服务均需要实现该接口,在服务的生命周期内发生任何错误均应通过 panic 阻止服务继续运行
- 生命周期示例: OnInit -> OnPreload -> OnMount
在 Golang 中,包与包之间互相引用会导致循环依赖,因此在模块化应用程序中,所有的服务均不应该直接引用其他服务。
服务应该在 OnInit 阶段将不依赖其他服务的内容初始化完成,并且如果服务需要暴露给其他服务调用,那么也应该在 OnInit 阶段完成对外暴露。
- 暴露方式可参考 modular/example
在 OnPreload 阶段,服务应该完成对其依赖服务的依赖注入,最终在 OnMount 阶段完成对服务功能的定义、路由的声明等。
Click to show internal directories.
Click to hide internal directories.