Skip to content

常见问题

Ktor 的正确发音是什么?

/keɪ-tor/

"Ktor" 这个名字代表什么?

Ktor 这个名字源自 ctor (构造函数) 的缩写,其中第一个字母被替换为 'K' 以表示 Kotlin。

如何提问、报告 Bug、联系我们、贡献代码、提供反馈等?

前往支持页面,了解更多关于可用支持渠道的信息。 《如何贡献》指南描述了您可以为 Ktor 贡献的方式。

CIO 是什么意思?

CIO 代表 基于协程的 I/O 。 通常,我们称之为使用 Kotlin 和协程实现 IETF RFC 或其他协议的逻辑,而不依赖外部基于 JVM 的库的引擎。

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

请确保相应的

Ktor 构件
了解如何将 Ktor 服务器依赖项添加到现有 Gradle/Maven 项目中。
已添加到构建脚本中。

Ktor 是否提供捕获 IPC 信号(例如 SIGTERM 或 SIGINT)的方法,以便服务器可以优雅地关闭?

如果您正在运行一个 EngineMain,它将自动处理。 否则,您需要手动处理。 您可以使用 Runtime.getRuntime().addShutdownHook 这一 JVM 机制。

如何获取代理后面的客户端 IP?

如果代理提供了正确的标头并且

ForwardedHeader
所需依赖项:io.ktor:%artifact_name% 代码示例:%example_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 事件?

请参阅

应用程序监控
代码示例:%example_name%
页面了解更多信息。

如何解决“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% 代码示例:%example_name% 原生服务器支持:✅
用于解析这些标头,这样
HttpsRedirect
所需依赖项:io.ktor:%artifact_name% 代码示例:%example_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