#netty
#netty
Вопрос:
В документации ChannelHandlerContext
объясняется, что a ChannelHandlerContext
может быть извлечен для последующего использования. Я внедряю протокол членства на основе сплетен, используя Netty. Каждая работающая система может принимать и создавать соединения. Существует Peer
класс с экземпляром для каждого подключенного узла. Этот одноранговый класс имеет атрибут для контекста, позволяющий отправлять сообщения через его экземпляры. Сохранение ChannelHandlerContext
при работе с подключением к серверу в моем случае было простым, но я не уверен, где и когда это извлечение должно происходить при открытии соединения. Есть ли рекомендуемый способ извлечения и сохранения ChannelHandlerContext
?
В моем проекте я использую a ChannelOutboundHandlerAdapter
, который только добавляет обработчик контекста и удаляет себя из конвейера:
class PeerContextRetriever extends ChannelOutboundHandlerAdapter {
private final Peer peer;
PeerContextActivator(Peer peer) {
this.peer = peer;
}
@Override
public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception {
promise.addListener(future -> peer.setContext(ctx));
promise.addListener(future -> ctx.channel().pipeline().remove(this));
super.connect(ctx, remoteAddress, localAddress, promise);
}
}
Это хороший способ сделать это или есть лучший подход?
Ответ №1:
handlerAdded(...)
это хорошее место. Вы можете переопределить это в своем ChannelHandler
. В конце концов, это на самом деле не имеет большого значения, но handlerAdded
является первым, что называется
Комментарии:
1. Спасибо за ваш ответ, @Norman. Я применил ваше предложение, потому что, основываясь только на названии, оно намекает на эту цель. Кроме того, я намеревался добавить это очень рано.