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
,它从客户端接收任意字节并丢弃它们。