Каков наилучший подход для привязки к другому порту / каждый порт имеет разные обработчики в Netty?,
Я хочу создать приложение на основе Netty, но мне нужно привязать к разным портам одновременно, и каждый порт должен иметь различную логику обработчика. Как это сделать в Netty?
Я искал в Интернете и знаю, что, вероятно, могу выполнить связывание (хост, порт) несколько раз, но это все еще означает, что все порты будут использовать один и тот же конвейер-обработчик.
большое спасибо
1 ответ
Решение
Вы просто создаете несколько ServerBootstrap
случаи использования одного ChannelFactory
, Например:
NioServerSocketChannelFactory factory = new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(), Executors.newCachedThreadPool());
ServerBootstrap bootstrap1 = new ServerBootstrap(factory);
bootstrap1.setPipelineFactory(...);
bootstrap1.bind(new InetSocketAddress(port1));
ServerBootstrap bootstrap2 = new ServerBootstrap(factory);
bootstrap2.setPipelineFactory(...);
bootstrap2.bind(new InetSocketAddress(port2));
Или вы можете динамически изменять конвейер. Например, в channelBound
Перезвоните:
@Override
public void channelBound(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
ctx.getPipeline().addLast("new", new SimpleChannelUpstreamHandler() {
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
...
}
});
}