Ktor 3.0 发布:Kotlin 原生框架的异步 HTTP 服务与客户端应用
Ktor 是 Kotlin 的本地框架,用于创建异步 HTTP 服务器和客户端应用程序,现已发布 3.0 版本。该版本引入了 kotlinx-io 库,带来了性能提升,但也带来了一些破坏性变更。此外,Ktor 3.0 还新增了对 Server-Sent 事件、CSRF、从 ZIP 文件提供静态资源等功能的支持。
主要变化
kotlinx-io 的引入
kotlinx-io 是一个低级别的 I/O 库,围绕 Buffer 抽象构建。Buffer 是一个可变的字节序列,类似于队列的数据结构,数据从尾部写入,从头部读取。Ktor 3.0 将 kotlinx.io.Source 别名为其 Input 类型,弃用了 Output,并重新实现了 ByteReadChannel 和 ByteWriteChannel。直接使用这些低级别类的开发者需要修改其应用程序以适应新的 API。
性能提升
引入 kotlinx-io 的主要好处是性能提升:
- 减少了在
ByteReadChannel、ByteWriteChannel和网络接口之间不必要的字节复制,从而实现了更高效的字节转换和解析,为未来的性能改进铺平了道路。 - 根据 JetBrains 的基准测试,新版本的 Ktor 在文件和套接字操作所需的时间上显著减少,某些情况下甚至高达 90%。
Server-Sent 事件支持
Ktor 3.0 最重要的变化之一是支持 Server-Sent 事件,这是一种服务器推送技术,用于创建服务器到客户端的通信通道。在数据主要单向流动的场景中,Server-Sent 事件比 WebSocket 更合适,尤其是在需要绕过防火墙或处理连接中断的情况下。相比之下,WebSocket 效率更高,延迟更低。
其他新特性
- CSRF 支持:Ktor 3.0 支持跨站请求伪造(CSRF)保护,可以为任何指定路由启用。
- 从 ZIP 文件提供静态资源:Ktor 3.0 能够直接从 ZIP 存档中提供静态资源。ZIP 文件从基础路径提供,并可以包含子目录,URL 结构将相应地反映这些子目录。
Wasm 支持
Ktor 3.0 的客户端现在支持将 WebAssembly(Wasm)作为构建目标。然而,Kotlin/Wasm 仍处于 Alpha 阶段,因此 Ktor 3.0 中的 Wasm 支持尚未准备好用于生产环境。
开始使用 Ktor
要开始使用 Ktor 创建新项目,可以访问 Ktor 网站,选择最符合需求的插件。可用的插件提供了身份验证、路由、监控、序列化等功能。如果想要将现有的 Ktor 2 项目升级到 Ktor 3,请务必阅读 JetBrains 提供的 迁移指南。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。