【问题标题】:How can I make a ktor netty server use a CachedThreadPool to process requests?如何让 ktor netty 服务器使用 CachedThreadPool 来处理请求?
【发布时间】:2021-05-03 21:05:02
【问题描述】:

对服务器端应用程序使用 ktor(1.4,如果需要可以升级),vanilla 初始化:

fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
...
fun Application.module() {
    ... stuff
}

我希望底层的 Netty 引擎使用 CachedThreadPool 来处理请求。我的很多请求需要大量时间来处理(例如,对数据库运行长查询),我认为这会阻塞处理请求的线程并可能使服务器无响应。

我该怎么做?还有其他选择吗?我是否需要进行其他更改(例如对协程调度程序)以确保达到预期效果?

【问题讨论】:

    标签: kotlin threadpool ktor


    【解决方案1】:

    我觉得应该是这样的

    val env: ApplicationEngineEnvironment = ....
    val server = embeddedServer(Netty, env) {
        configureBootstrap = {
            group(NioEventLoopGroup(..., CachedThreadPool(..)))
        }
    }
    
    server.start(wait = true)
    

    【讨论】:

    • 差不多。这就是问题所在——在NettyApplicatinEngine.bootstraps 中,他们调用configureBootstrap(这很好),但立即调用group(conn, worker),它第二次初始化父组和子组,这会引发错误——组已设置。 :-(
    • 关于我之前的评论,我已经向 Ktor 团队提交了一个错误 => youtrack.jetbrains.com/issue/KTOR-2078
    • 作为记录,这已在最新版本中修复。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 2019-03-10
    • 2018-06-23
    • 1970-01-01
    相关资源
    最近更新 更多