在没有ChannelFuture的情况下写入Netty频道

时间:2012-01-22 10:22:38

标签: java netty

是否可以在不创建不必要的ChannelFuture的情况下写入Netty频道? (不为GC生成不必要的对象......)

2 个答案:

答案 0 :(得分:6)

如果您真的希望不想创建ChannelFuture,可以为Netty 3执行此操作:

Channels.write(ctx, Channels.succeededFuture(channel), message);

Channels.succeededFuture(..)返回一个通道本地单例对象。但是,您永远不应该向返回的未来添加侦听器,因为它已经完成。

在Netty 4中,您可以使用void promise:

ctx.write(msg, ctx.voidPromise());

ChannelHandlerContext.voidPromise()返回一个永不满足的虚拟单例承诺。添加监听器或等待其完成等操作将立即失败。

答案 1 :(得分:2)

否......将始终创建ChannelFuture。但是ChannelFuture虽然便宜又小,所以我认为有更好的地方可以寻找优化。

我认为更重要的是尽可能少地调用Channel.write(..),因为写入在系统调用方面可能很昂贵。因此,如果您需要发送多个缓冲区,您可以将它们全部放在一个中,只调用一次Channel.write(...)而不是5次。

在SMTP中,例如,如果SMTP服务器支持PIPELINING扩展,那么可以最佳地使用资源。