Repolode
apple

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. 1

    在 Package.swift 的依赖中添加 SwiftNIO,版本范围如 from: "2.0.0"

  2. 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 数据每日更新。

相关项目