Netty 中是否有类似 transferFrom 的零拷贝功能?

is there transferFrom like functionality in Netty for zero copy?

我正在开发一个处理相当大的负载的 Http 服务器。由于 Netty 提供零拷贝,我想到了使用 Netty 的零拷贝对有效负载进行零复制。但是 Netty 似乎只提供了 transferTo(WritableByteChannel target, long position) 而没有提供 transferFrom() 之类的直接将内容读入文件的方法。

是不是就是这样,或者有什么变通办法吗?谢谢。

Netty 通道不提供将入站流量零复制到文件中的操作。或者,您可以从事件循环中取消注册您的 Netty 通道,将零复制到文件中,然后将其重新注册到事件循环中。但是,这是一项相对昂贵的操作,因此它的增益可能会被 unregistration/reregistration 开销抵消。

Netty 4.0.28+ provides splice support when using the native epoll transport. After proper setup, channel.spliceTo(fileDescriptor, 0, data.length); call in your handler 可以解决问题。请注意,这仅适用于 Linux.