是否可以在不创建不必要的ChannelFuture的情况下写入Netty频道? (不为GC生成不必要的对象......)
答案 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扩展,那么可以最佳地使用资源。