Skip to content

常見問題

常見問題

Ktor 的正確發音是什麼?

/keɪ-tor/

「Ktor」這個名稱代表什麼意思?

Ktor這個名稱源自縮寫ctor(建構函式),並將第一個字母替換為代表Kotlin的「K」。

我該如何提出問題、回報錯誤、聯繫你們、進行貢獻或提供意見回饋等?

請前往支援頁面以進一步了解可用的支援管道。 如何貢獻指南說明了您可以為Ktor做出貢獻的方式。

CIO 代表什麼意思?

CIO代表 基於協同程式的I/O (Coroutine-based I/O)。 通常我們將其稱為一種使用Kotlin和協同程式來實作IETF RFC或其他協定邏輯的引擎,且不依賴外部基於JVM的程式庫。

如何修復未解決的(紅色)Ktor 匯入?

請確保在建置指令碼中加入了相對應的

Ktor構件
了解如何將 Ktor Server 相依性新增至現有的 Gradle/Maven 專案。

Ktor 是否提供擷取 IPC 訊號(例如 SIGTERM 或 SIGINT)的方法,以便平滑地處理伺服器關閉?

如果您正在執行EngineMain,它將會被自動處理。 否則,您需要手動處理。 您可以使用JVM提供的Runtime.getRuntime().addShutdownHook設施。

在代理伺服器後方如何獲取用戶端 IP?

如果代理伺服器提供了正確的標頭,且已安裝

ForwardedHeader
所需的相依性:io.ktor:%artifact_name%
外掛程式,則call.request.origin屬性會提供關於原始呼叫者(代理伺服器)的連線資訊

我該如何測試 main 分支上最新的提交?

您可以從jetbrains.space獲取Ktor每晚建置版本。 請從早期體驗計劃了解更多資訊。

我該如何確認我正在使用的是哪個版本的 Ktor?

您可以使用

DefaultHeaders
所需的相依性:io.ktor:%artifact_name%
外掛程式,它會發送包含Ktor版本的Server回應標頭,例如:

我的路由未被執行。我該如何偵錯?

Ktor提供了一種追蹤機制來協助排查路由決策問題。 請參閱追蹤路由章節。

如何解決「Response has already been sent」錯誤?

這表示您、或是某個外掛程式或攔截器已經呼叫過call.respond* 函式,而您正試圖再次呼叫它。

我該如何訂閱 Ktor 事件?

請參閱

頁面以了解更多資訊。

如何解決「No configuration setting found for key ktor」錯誤?

這表示Ktor無法找到

設定檔
了解如何在設定檔中配置各種伺服器參數。
。 請確保resources資料夾中存在設定檔,且該resources資料夾已被正確標記。 建議使用Ktor專案產生器IntelliJ IDEA Ultimate 的 Ktor 外掛程式來建立專案,以獲得一個可運作的專案基底。如需更多資訊,請參閱
建立、開啟並執行新的 Ktor 專案
了解如何使用 Ktor 開啟、執行和測試伺服器應用程式。

我可以在 Android 上使用 Ktor 嗎?

可以,已知Ktor伺服器和用戶端可在Android 5(API 21)或更高版本上運作,至少在使用Netty引擎時是如此。

為什麼「CURL -I」會傳回「404 Not Found」?

CURL -ICURL --head的別名,用於執行HEAD請求。 預設情況下,Ktor不會為GET處理常式處理HEAD請求。 若要啟用此功能,請安裝

AutoHeadResponse
%plugin_name% 能夠針對每個已定義 GET 的路由自動回應 HEAD 請求。
外掛程式。

如何解決使用「HttpsRedirect」外掛程式時的無限重定向問題?

最可能的原因是您的後端位於反向代理或負載平衡器之後,而該中間設備正向您的後端發送一般的HTTP請求,因此Ktor後端內的HttpsRedirect外掛程式認為這是一個一般的HTTP請求,並以重定向作為回應。

通常,反向代理會發送一些描述原始請求的標頭(例如原本是否為HTTPS或原始IP位址),而

ForwardedHeader
所需的相依性:io.ktor:%artifact_name%
外掛程式可以解析這些標頭,讓
HttpsRedirect
所需的相依性:io.ktor:%artifact_name%
外掛程式知道原始請求是HTTPS。

如何在 Windows 上安裝「curl」以便在 Kotlin/Native 上使用對應的引擎?

Curl用戶端引擎需要安裝 curl程式庫。 在Windows上,您可以考慮使用MinGW/MSYS2的curl二進位檔。

  1. 按照MinGW/MSYS2中的說明安裝MinGW/MSYS2。

  2. 使用以下指令安裝libcurl

    shell
  3. 如果您將MinGW/MSYS2安裝在預設位置,請將 C:\msys64\mingw64\bin\ 新增至PATH環境變數中。

如何解決「NoTransformationFoundException」?

NoTransformationFoundException 代表無法為接收的主體找到合適的轉換,無法將結果型別轉換為用戶端預期的型別。

  1. 檢查請求中的Accept標頭是否指定了所需的內容類型,以及伺服器回應中的Content-Type標頭是否與用戶端預期的型別相符。

  2. 為您正在處理的特定內容類型註冊必要的內容轉換。

    您可以在用戶端使用ContentNegotiation 外掛程式。 此外掛程式允許您指定如何針對不同的內容類型進行序列化和反序列化資料。

    kotlin
  3. 確保您安裝了所有需要的外掛程式。可能缺少的功能包括:

    1. 用戶端WebSockets與 伺服器WebSockets
    2. 用戶端ContentNegotiation與 伺服器ContentNegotiation
    3. Compression