SwiftNIO:发送的包裹部分收到

SwiftNIO: Sent package partially received

我已经使用 swift nio 开发了一个客户端和一个服务器,我发送任何大小在 12 到 1000 字节之间的包都没有问题,因为服务器发送了一个 528 字节的包,而当客户端收到它时,它是 512 字节.我想弄清楚为什么会这样。有谁知道是否有机会设置最小 ByteBuffer 容量?或者如果我遗漏了什么。 感谢大家

假设您正在使用 TCP(即使用 ClientBootstrap),您不能指望服务器发送的消息的边界会反映在您的读取中。 TCP 是“面向流的”:这意味着消息根本没有边界,它们的行为就像数据流一样。在 NIO 的情况下,这意味着您会希望看到 另一个 在包含更多数据后不久读取。

用于读取的初始 ByteBuffer 容量由 Channel 使用的 RecvByteBufferAllocator 控制。这可以被覆盖:

ClientBootstrap(group: group)
    .channelOption(ChannelOptions.recvAllocator, 
                   AdaptiveRecvByteBufferAllocator(minimum: 1024, initial: 1024, maximum: 65536))

NIO 2.23.0 中 AdaptiveRecvByteBufferAllocator 的标准默认值是最小大小为 64 字节,初始大小为 1024 字节,最大大小为 65536 字节。一般来说,我们不建议覆盖这些默认值,除非您需要:因为 TCP NIO 将确保缓冲区的大小适合我们看到的读取。