使用 Netty 编写的有效方法
Posted
技术标签:
【中文标题】使用 Netty 编写的有效方法【英文标题】:efficient way to write using Netty 【发布时间】:2012-05-30 11:07:10 【问题描述】:当我将对象写入网络时,Netty 是否为我提供了避免缓冲区复制的任何方法?在其Channel.write(Object)
中,据我了解,该对象被制作为通过编码器(返回 ChannelBuffer 副本)。这基本上意味着对于每条消息,我最终都会创建一个缓冲区副本,最终创建大量短暂的缓冲区对象
Netty 能否为我提供一个可重用的 ChannelBuffer,我用它填充字节并将这些字节直接写入网络?
【问题讨论】:
【参考方案1】:Netty 已经回收了缓冲区,你不需要关心这个。
另外,编码器/解码器只是您自己编写的,Netty 只能处理 ChannelBuffer 对象,如果您正在将 ChannelBuffer 写入您的频道,它周围没有任何魔法,它的内容是直接写入输出。
您可以(并且应该)做的是创建您需要的确切大小的缓冲区,以避免在向缓冲区加载数据时分配动态缓冲区。
【讨论】:
“Netty 已经回收缓冲区”是什么意思? ChannelBuffers.buffer() 每次都会创建新的缓冲区 - 只有 gc 会回收它们? 哎呀,我的错,它还没有实现 - github.com/netty/netty/issues/62以上是关于使用 Netty 编写的有效方法的主要内容,如果未能解决你的问题,请参考以下文章