基于 URLSession 构建的 Swift HTTP 网络库,提供链式请求、参数编码、上传下载与响应校验。
apple/swift-nio
用 Swift 编写的跨平台非阻塞事件驱动网络框架,用于构建高性能协议服务端与客户端。
- Star
- 8,538
- Fork
- 816
- 未关闭 Issue
- 307
- 最近提交
- 3天前
这是什么?
SwiftNIO 是一个面向 Swift 的底层网络框架,基于非阻塞 I/O 与事件循环来构建协议服务端和客户端。它不为每个连接分配一个线程,而是把大量连接分布到少量事件循环上处理,适合维持大量低活跃连接的服务器。项目定位上与 Netty 相似,只是使用 Swift 编写。
框架提供核心构件:用于 I/O 调度的 EventLoopGroup 与 EventLoop,用于处理数据的 Channel、ChannelPipeline 和 ChannelHandler,用于字节操作的 ByteBuffer,以及用于异步结果的 future 与 promise。模块涵盖 POSIX I/O(NIOPosix)、测试辅助(NIOEmbedded、NIOTestUtils),并包含底层的 HTTP/1.1 与 WebSocket 协议实现。TLS、HTTP/2、SSH 等协议则位于配套仓库中。
SwiftNIO 主要面向框架开发者,以及需要精细控制网络性能的团队,而不是直接用于终端应用的 Web 开发。AsyncHTTPClient、gRPC Swift、PostgresNIO 等更高层的库都建立在它之上。
核心功能
- 01基于事件循环的非阻塞 I/O,在不同平台上使用 kqueue 或 epoll。
- 02Channel 与 ChannelPipeline 模型,便于组合可复用的协议处理器。
- 03提供底层 HTTP/1.1 与 WebSocket 协议实现。
- 04ByteBuffer 支持高效的写时复制字节操作。
- 05EmbeddedChannel 与 EmbeddedEventLoop 可在无真实网络的情况下测试协议代码。
- 06支持 macOS 与 Linux,并对 OpenBSD 提供实验性支持。
适用场景
- 用 Swift 构建需要处理大量并发连接的自定义协议服务端或客户端。
- 在非阻塞核心之上开发更高层的 Swift 网络库或 Web 框架。
- 编写对性能敏感、不适合线程-每连接模型的服务。
- 使用嵌入式 Channel 对协议处理器进行隔离单元测试。
快速上手
- 1
在 Package.swift 的依赖中添加 SwiftNIO,版本范围如 from: "2.0.0"
- 2
在目标中添加 NIO 产品,并在 Swift 代码中导入 NIO
使用前须知
- 它是底层网络工具包,不是高级 Web 框架,使用前需要理解其事件循环和 Channel 模型。
- 较新的版本需要较新的 Swift 工具链,例如 2.98.0 及以后版本需要 Swift 6.1。
- SwiftNIO 1 已停止维护,不再添加新功能。
标签
常见问题
- swift-nio 是什么?
- 用 Swift 编写的跨平台非阻塞事件驱动网络框架,用于构建高性能协议服务端与客户端。 SwiftNIO 是一个面向 Swift 的底层网络框架,基于非阻塞 I/O 与事件循环来构建协议服务端和客户端。它不为每个连接分配一个线程,而是把大量连接分布到少量事件循环上处理,适合维持大量低活跃连接的服务器。项目定位上与 Netty 相似,只是使用 Swift 编写。
- swift-nio 可以免费使用吗?用的什么许可证?
- swift-nio 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
- swift-nio 还在维护吗?
- 活跃维护中。swift-nio 最近一次提交是在 2026年10月19日。
- swift-nio 适合用来做什么?
- 用 Swift 构建需要处理大量并发连接的自定义协议服务端或客户端。 在非阻塞核心之上开发更高层的 Swift 网络库或 Web 框架。 编写对性能敏感、不适合线程-每连接模型的服务。 使用嵌入式 Channel 对协议处理器进行隔离单元测试。
- swift-nio 怎么安装和运行?
- 在 Package.swift 的依赖中添加 SwiftNIO,版本范围如 from: "2.0.0" 在目标中添加 NIO 产品,并在 Swift 代码中导入 NIO
- 在哪里获取 swift-nio?
- 源代码和安装说明在 GitHub 上:https://github.com/apple/swift-nio
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
Socket.IO 是一个用于客户端与服务器之间实时、双向、低延迟事件通信的库。
基于 Go 标准库 net/http 构建的高性能、极简 Web 框架。
一个快速、易用、类 Flask 路由风格的 C++ 微框架,用于构建 HTTP 和 WebSocket 服务。
一款支持 TLS 的交互式拦截 HTTP 代理,提供终端、命令行和 Web 三种界面,用于查看 HTTP/1、HTTP/2 和 WebSocket 流量。