伺服器外掛程式
Ktor 中典型的請求/回應管線如下所示:

它從一個請求開始,該請求被路由到特定的處理常式,由我們的應用程式邏輯處理,最後得到回應。
使用外掛程式增加功能
許多應用程式需要不屬於應用程式邏輯範圍內的通用功能。這可能包括序列化和內容編碼、壓縮、標頭、Cookie 支援等。所有這些在 Ktor 中都是透過我們所謂的 外掛程式 來提供的。
如果我們查看之前的管線圖,外掛程式位於請求/回應與應用程式邏輯之間:

當請求進來時:
- 它透過路由機制被路由到正確的處理常式
- 在移交給處理常式之前,它會經過一個或多個外掛程式
- 處理常式(應用程式邏輯)處理請求
- 在回應發送給用戶端之前,它會經過一個或多個外掛程式
路由也是一個外掛程式
外掛程式的設計方式旨在提供最大的靈活性,並允許它們存在於請求/回應管線的任何區段中。 事實上,我們到目前為止所稱的 routing,也不過是一個外掛程式。

新增外掛程式相依性
大多數外掛程式需要特定的相依性。例如,CORS 外掛程式需要在建置指令碼中加入 ktor-server-cors 構件:
安裝外掛程式
外掛程式通常在伺服器初始化階段使用 install 函式進行配置,該函式接受一個外掛程式作為參數。根據您建立伺服器的方式,您可以在 embeddedServer 呼叫中安裝外掛程式...
import io.ktor.server.application.*
import io.ktor.server.plugins.cors.*
import io.ktor.server.plugins.compression.*
// ...
fun main() {
embeddedServer(Netty, port = 8080) {
install(CORS)
install(Compression)
// ...
}.start(wait = true)
}... 或在指定的模組中安裝:
import io.ktor.server.application.*
import io.ktor.server.plugins.cors.*
import io.ktor.server.plugins.compression.*
// ...
fun Application.module() {
install(CORS)
install(Compression)
// ...
}除了攔截請求和回應外,外掛程式還可以有一個選用的配置區段,在此步驟中進行配置。
例如,在安裝 Cookies 時,我們可以設定某些參數,例如我們希望 Cookie 儲存的位置或其名稱:
install(Sessions) {
cookie<MyCookie>("MY_COOKIE")
}將外掛程式安裝到特定路由
在 Ktor 中,您不僅可以全域安裝外掛程式,還可以將其安裝到特定的路由。如果您需要為不同的應用程式資源提供不同的外掛程式配置,這會非常有用。例如,下方的範例顯示了如何為 /index 路由加入指定的快取標頭:
route("/index") {
install(CachingHeaders) {
options { call, content -> CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 1800)) }
}
get {
call.respondText("Index page")
}
}請注意,以下規則適用於同一外掛程式的多個安裝:
安裝到特定路由的外掛程式配置會覆寫其全域配置。
路由會合併同一路由的安裝,並以最後一次安裝為準。例如,對於這樣的應用程式...
kotlinrouting { route("index") { install(CachingHeaders) { /* 第一個配置 */ } get("a") { // ... } } route("index") { install(CachingHeaders) { /* 第二個配置 */ } get("b") { // ... } } }
"}
... 對 /index/a 和 /index/b 的呼叫都僅由外掛程式的第二次安裝處理。
預設、可用及自訂外掛程式
預設情況下,Ktor 不會啟用任何外掛程式,因此需要由您根據應用程式的功能需求來安裝外掛程式。
然而,Ktor 確實提供了各種開箱即用的外掛程式。您可以在 Ktor 外掛程式儲存庫中查看這些外掛程式的完整清單。
此外,您還可以建立自己的自訂外掛程式。
