2

使用 Jetty 12 演示 Ktor 中的虚拟线程支持

 7 months ago
source link: https://www.jdon.com/72500.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用 Jetty 12 演示 Ktor 中的虚拟线程支持

这是使用虚拟线程在 Jetty 12 上运行 Ktor 的演示

背景:
我花了足够长的时间研究反应式数据库驱动程序等,并受到这个问题 的启发,我决定构建一个 POC,使用 Jetty 12 演示 Ktor 中的虚拟线程支持。其中大部分是改编自现有 Ktor Jetty 引擎的代码,但是我已经完全放弃了 servlet 支持,这应该是运行 Jetty 的最快方式

它应该非常容易使用,添加 dep 并启动​​服务器,如下所示:

fun main(args: Array<String>) {
    val config = CommandLineConfig(args)
    EmbeddedServer(config.applicationProperties, Jetty12) { takeFrom(config.engineConfig) }.start(true)
}

该软件包包含将 Jetty 12 与 Ktor 集成的机制,以及在虚拟线程上进行调度的线程调度器。这让你可以做很多看起来奇怪但有趣的事情,比如在不阻塞操作系统线程的情况下使用 runBlocking {},以及使用使用 ThreadLocal 的库。

  • 基于 Ktor 3.0.0-beta1 构建。这使得它与 2.x.x 不兼容,也不支持 Kotlin 4 中将要使用的新 kotlinx IO 库。
  • 我尝试过的大多数 HTTP 1.1 请求似乎都能正常工作,但 HTTPX/websocket 支持几乎肯定无法正常工作。
  • vthread Dispatcher 可以工作,但我不知道这是否是个好主意。
  • 仅限 Java 21+
  • initializeServer()一团糟

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK