跳到主要内容

入口点

每一个应用都有一个入口点,在 SenseJS 中,入口点是一个模块。

通常应用分为两类:一类是运行一次就退出的工具类应用;另一类是长期运行的应用,也就是常说的守护进程或服务。

工具类应用

在 SenseJS 中,这样的应用可以通过以下方式启动:

@Module({ requires: [OtherModules] })
class MyApp {
main() {
}
}

ApplicationRunner.instance.run(MyApp, 'main');

第二个参数是入口函数的名称。当控制流离开 main 函数时,框架会销毁所有组件并退出进程。

守护进程类应用

这样的应用可以通过如下的方式启动:

@Module({ requires: [OtherModules] })
class MyApp {
@OnModuleStart()
onModuleStart() {
// Start listening for requests
}
@OnModuleStop()
onModuleStop() {
// Stop listening for requests
}
}
ApplicationRunner.instance.start(MyApp);

或者通过装饰器的方式:

@Entrypoint()
@Module({ requires: [OtherModules] })
class MyApp {
@OnModuleStart()
onModuleStart() {
// Start listening for requests
}
@OnModuleStop()
onModuleStop() {
// Stop listening for requests
}
}

这类应用除了会调用 @OnModuleCreated/@OnModuleDestroyed 钩子之外,还会调用 @OnModuleStart/@OnModuleStop 钩子。

同时,这类应用不会在 ProcessManager.exit() 被调用或者收到退出信号之前退出。SenseJS 会确保所有的 @OnModuleStop 钩子被调用后应用才会退出。

总结

一个 SenseJS 应用是由多个模块组成的。有的模块负责组织可注入的对象,有的模块负责管理 I/O 资源的初始化和销毁,同时还有一个模块作为入口,依赖于其他所有模块。SenseJS 框架会根据所有模块的依赖关系图,优雅地启动和关闭你的应用。