使用 Jetty 12 演示 Ktor 中的虛擬執行緒支援

banq發表於2024-02-17


這是使用虛擬執行緒在 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()一團糟

相關文章