我想构建一个基于Netty的应用程序,但需要同时绑定到不同的端口,并且每个端口需要具有不同的处理程序逻辑。如何在Netty中执行此操作?
我在线搜索,并且知道我可以多次绑定(主机,端口),但这仍然意味着所有端口都将使用相同的处理程序管道。
非常感谢
答案 0 :(得分: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 {
...
}
});
}