使用 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 编写的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

java编写基于netty的RPC框架

《Java 编写基于 Netty 的 RPC 框架》

使用netty编写第一个hello netty服务器

Netty 实战:如何编写一个麻小俱全的 web 容器

网络I/o编程模型24 基于netty编写RPC通信框架

netty编写一个简单的聊天程序