这是使用虚拟线程在 Jetty 12 上运行 Ktor 的演示
背景:
我花了足够长的时间研究反应式数据库驱动程序等,并受到这个问题 的启发,我决定构建一个 POC,使用 Jetty 12 演示 Ktor 中的虚拟线程支持。其中大部分是改编自现有 Ktor Jetty 引擎的代码,但是我已经完全放弃了 servlet 支持,这应该是运行 Jetty 的最快方式。
它应该非常容易使用,添加 dep 并启动服务器,如下所示:
fun main(args: Array<String>) { |
该软件包包含将 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()一团糟