45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
package server_test
|
|
|
|
import (
|
|
"github.com/kercylan98/minotaur/server"
|
|
"time"
|
|
)
|
|
|
|
// 这个案例中我们将 `TestService` 绑定到了 `srv` 服务器中,当服务器启动时,将会对 `TestService` 进行初始化
|
|
//
|
|
// 其中 `TestService` 的定义如下:
|
|
// ```go
|
|
//
|
|
// type TestService struct{}
|
|
//
|
|
// func (ts *TestService) OnInit(srv *server.Server) {
|
|
// srv.RegStartFinishEvent(onStartFinish)
|
|
//
|
|
// srv.RegStopEvent(func(srv *server.Server) {
|
|
// fmt.Println("server stop")
|
|
// })
|
|
// }
|
|
//
|
|
// func (ts *TestService) onStartFinish(srv *server.Server) {
|
|
// fmt.Println("server start finish")
|
|
// }
|
|
//
|
|
// ```
|
|
//
|
|
// 可以看出,在服务初始化时,该服务向服务器注册了启动完成事件及停止事件。这是我们推荐的编码方式,这样编码有以下好处:
|
|
// - 具备可控制的初始化顺序,避免 init 产生的各种顺序导致的问题,如配置还未加载完成,即开始进行数据库连接等操作
|
|
// - 可以方便的将不同的服务拆分到不同的包中进行管理
|
|
// - 当不需要某个服务时,可以直接删除该服务的绑定,而不需要修改其他代码
|
|
// - ...
|
|
func ExampleBindService() {
|
|
srv := server.New(server.NetworkNone, server.WithLimitLife(time.Second))
|
|
server.BindService(srv, new(TestService))
|
|
|
|
if err := srv.RunNone(); err != nil {
|
|
panic(err)
|
|
}
|
|
// Output:
|
|
// server start finish
|
|
// server stop
|
|
}
|