-1

我想基于Netty构建一个应用,但是需要同时绑定不同的端口,每个端口需要有不同的handler逻辑。如何在 Netty 中做到这一点?

我在网上搜索,知道我可能可以多次执行 bind(host,port) ,但这仍然意味着所有端口都将使用相同的处理程序管道。

非常感谢

4

1 回答 1

2

您只需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 {
             ...
        }
    });
}
于 2013-05-20T09:04:53.027 回答