Skip to content

常见问题解答

常见问题解答

Ktor 的正确发音是什么?

/keɪ-tor/

“Ktor”这个名字代表什么?

Ktor 这个名字源于缩写 ctor(构造函数),并将第一个字母替换为代表 Kotlin 的 “K”。

如何提问、报告错误、联系你们、进行贡献或提供反馈等?

请访问 Support 页面以详细了解可用的支持渠道。 How to contribute 指南介绍了您可以为 Ktor 做出贡献的方式。

CIO 是什么意思?

CIO 代表 基于协程的 I/O(Coroutine-based I/O) 。 通常我们将其称为一个使用 Kotlin 和协程(Coroutines)来实现 IETF RFC 或其他协议逻辑的引擎,且不依赖于外部基于 JVM 的库。

如何修复未解析(红色显示)的 Ktor 导入?

请确保已在构建脚本中添加了相应的

Ktor 构件
了解如何向现有的 Gradle/Maven 项目中添加 Ktor Server 依赖项。

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 提供了一种跟踪机制来帮助排查路由决策。 请查看 Tracing routes 章节。

如何解决 '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 表示无法为接收到的正文找到合适的转换,即无法将生成的(resulted)类型转换为客户端预期的(expected)类型。

  1. 检查请求中的 Accept 标头是否指定了所需的内容类型,以及服务器响应中的 Content-Type 标头是否与客户端预期的类型匹配。

  2. 为您正在处理的特定内容类型注册必要的内容转换。

    您可以在客户端使用 ContentNegotiation 插件。 此插件允许您指定如何针对不同的内容类型对数据进行序列化和反序列化。

    kotlin
  3. 确保安装了所有需要的插件。可能缺失的功能包括:

    1. 客户端 WebSockets 和服务器端 WebSockets
    2. 客户端 ContentNegotiation 和服务器端 ContentNegotiation
    3. Compression