Kotlin ktor中的应用程序级事件未被调用

Kotlin ktor中的应用程序级事件未被调用,kotlin,netty,ktor,Kotlin,Netty,Ktor,我目前正在使用Netty在ktor中试验应用程序事件。然而,唯一被调用的钩子是“ApplicationStarted”。我做错了什么 我在所有函数中设置了断点,进行了订阅,但并不是所有的事件侦听器都被调用。 我还试图在ktor文档中找到一些解释,但没有成功 import io.ktor.application.* fun Application.events(){ environment.monitor.subscribe(ApplicationStarting, ::onStarti

我目前正在使用Netty在ktor中试验应用程序事件。然而,唯一被调用的钩子是“ApplicationStarted”。我做错了什么

我在所有函数中设置了断点,进行了订阅,但并不是所有的事件侦听器都被调用。 我还试图在ktor文档中找到一些解释,但没有成功

import io.ktor.application.*

fun Application.events(){
    environment.monitor.subscribe(ApplicationStarting, ::onStarting)
    environment.monitor.subscribe(ApplicationStarted, ::onStarted)
    environment.monitor.subscribe(ApplicationStopping, ::onStopping)
    environment.monitor.subscribe(ApplicationStopped, ::onStopped)
    environment.monitor.subscribe(ApplicationStopPreparing, ::onPrepareStop)
}

private fun onStarting(app: Application){
    app.log.info("Application starting")
}
private fun onStarted(app: Application){
    app.log.info("Application started")
}
private fun onStopping(app: Application){
    app.log.info("Application stopping")
}
private fun onStopped(app: Application){
    app.log.info("Application stopped")
}
private fun onPrepareStop(env: ApplicationEnvironment){
    env.log.info("Preparing App Stop")
}
“应用程序已启动”显示在日志消息中,但没有其他输出


我做得有多糟,或者这是一个bug?

好的,我一直在研究这个问题,发现调用的应用程序级事件的数量取决于您使用的服务器。以下嵌入式服务器支持以下事件:

+--------+----------+---------+---------------+----------+---------+ | Engine | Starting | Started | StopPreparing | Stopping | Stopped | +--------+----------+---------+---------------+----------+---------+ | Netty | NO | YES | NO | NO | NO | | CIO | NO | YES | YES | YES | YES | | Tomcat | NO | YES | NO | NO | NO | | Jetty | NO | YES | NO | NO | NO | +--------+----------+---------+---------------+----------+---------+
private fun onStarted(app: Application){
    Runtime.getRuntime()?.addShutdownHook( Thread {
        app.environment.monitor.raise(ApplicationStopped, app)
    })
    app.log.info("Application started")
}