Запись на канал Netty без ChannelFuture - PullRequest
4 голосов
/ 22 января 2012

Можно ли записывать на канал Netty без создания ненужного ChannelFuture? (Без создания ненужного объекта для GC ...)

Ответы [ 2 ]

6 голосов
/ 27 января 2012

Если вы действительно хотите не создавать ChannelFuture, вы можете сделать это для Netty 3:

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

Channels.succeededFuture(..) возвращает синглтон-объект локального канала. Однако никогда не следует добавлять прослушиватель в возвращенное будущее, поскольку оно уже завершено.

В Netty 4 вы можете использовать void обещание:

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

ChannelHandlerContext.voidPromise() возвращает фиктивное одиночное обещание, которое никогда не выполняется. Операции, такие как добавление слушателя или ожидание его выполнения, сразу же завершатся неудачей.

2 голосов
/ 22 января 2012

Нет ... ChannelFuture будет создаваться постоянно.Но ChannelFuture дешевый и маленький, поэтому я думаю, что есть лучшие места для поиска оптимизаций.

Я думаю, что более важным является вызов Channel.write (..) как можно меньше, так как запись может быть дорогой в плане системных вызовов.Поэтому, если вам нужно отправить несколько буферов, вы можете поместить их все в один и просто вызвать Channel.write (...) один раз, а не, например, 5 раз.

В SMTP это можно сделать, например, еслиSMTP-сервер поддерживает расширение PIPELINING и, таким образом, оптимально использует ресурсы.

...