NIOExtras 是一个放置与 NIO 相关但并非核心代码的好地方。它也可以用于孵化 API,这些 API 可以通过核心 NIO 实现,但目前使用起来比较繁琐。
什么样的代码适合贡献给 NIOExtras?
所有代码都将像 SwiftNIO 项目中的其他仓库一样,经过代码审查。
swift-nio-extras 是 SwiftNIO 2 系列仓库的一部分,并依赖于以下内容:
swift-nio,版本 2.30.0 或更高版本。zlib 及其开发头文件。 但不用担心,您几乎可以在任何可以编译任何代码的 UNIX 系统上找到 zlib。要依赖于 swift-nio-extras,请将以下内容放入您的 Package.swift 的 dependencies 中:
.package(url: "https://github.com/apple/swift-nio-extras.git", from: "1.0.0"),
最新版本的 SwiftNIO Extras 支持 Swift 5.7.1 及更高版本。 SwiftNIO Extras 版本支持的最低 Swift 版本如下所示:
| SwiftNIO Extras | 最低 Swift 版本 |
|---|---|
1.0.0 ..< 1.10.0 |
5.0 |
1.10.0 ..< 1.11.0 |
5.2 |
1.11.0 ..< 1.14.0 |
5.4 |
1.14.0 ..< 1.19.0 |
5.5.2 |
1.19.0 ..< 1.20.0 |
5.6 |
1.20.0 ..< 1.23.0 |
5.7.1 |
1.23.0 ... |
5.8 |
在 nio-extras-0.1 分支上,您可以找到适用于 SwiftNIO 1 系列的 swift-nio-extras 版本。 它需要 Swift 4.1 或更高版本。
QuiescingHelper:帮助停止服务器,方法是在所有先前打开的连接关闭时通知用户代码。LineBasedFrameDecoder 在行尾分割传入的 ByteBuffer。FixedLengthFrameDecoder 按固定数量的字节分割传入的 ByteBuffer。LengthFieldBasedFrameDecoder 通过包含在缓冲区内的固定长度标头中指定的字节数来分割传入的 ByteBuffer。LengthFieldPrepender 将字节数作为固定长度标头添加到传出的 ByteBuffer 的开头。可以与 LengthFieldBasedFrameDecoder 在编解码器对中使用。RequestResponseHandler 将请求和 promise 与相应的响应匹配。HTTPResponseCompressor 压缩每个 HTTP/1 响应消息的主体。DebugInboundsEventHandler 打印出所有通过 ChannelPipeline 的入站事件。DebugOutboundsEventHandler 打印出所有通过 ChannelPipeline 的出站事件。WritePCAPHandler 一个 ChannelHandler,写入 .pcap,其中包含 ChannelPipeline 的流量,您可以使用 Wireshark/tcpdump 进行检查。HTTP1ToHTTPClientCodec 一个 ChannelHandler,它将 HTTP/1 消息转换为客户端的共享 HTTP 类型。HTTP1ToHTTPServerCodec 一个 ChannelHandler,它将 HTTP/1 消息转换为服务器端的共享 HTTP 类型。HTTPToHTTP1ClientCodec 一个 ChannelHandler,出于兼容性目的,它将共享 HTTP 类型转换为客户端的 HTTP/1 消息。HTTPToHTTP1ServerCodec 一个 ChannelHandler,出于兼容性目的,它将共享 HTTP 类型转换为服务器端的 HTTP/1 消息。HTTP2FramePayloadToHTTPClientCodec 一个 ChannelHandler,它将 HTTP/2 概念转换为客户端的共享 HTTP 类型。HTTP2FramePayloadToHTTPServerCodec 一个 ChannelHandler,它将 HTTP/2 概念转换为服务器端的共享 HTTP 类型。HTTPResumableUploadHandler 一个 ChannelHandler,它将 HTTP 可恢复上传转换为常规上传。HTTPDrippingDownloadHandler 一个 ChannelHandler,它向客户端发送可配置的零流。HTTPReceiveDiscardHandler 一个 ChannelHandler,它从客户端接收任意字节并丢弃它们。