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