Каков наилучший подход для привязки к другому порту / каждый порт имеет разные обработчики в 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 {
             ...
        }
    });
}
Другие вопросы по тегам