我可以使用Netty将两个处理程序绑定到同一个端口吗?



我需要使用Netty创建一个服务器应用程序,这将允许在同一端口上的多个套接字连接。也就是说,我需要能够将多个ServerBootStrap对象绑定到同一个端口。使用Netty可以实现这一点吗?我的代码是这样的:

@Override
public void startServer() {
bossGroup = new NioEventLoopGroup(1);
workerGroup = new NioEventLoopGroup();
try {
    ServerBootstrap b = new ServerBootstrap();
    b.group(bossGroup, workerGroup)
        .channel(NioServerSocketChannel.class)
        .option(ChannelOption.SO_REUSEADDR,true)
        .option(ChannelOption.SO_BACKLOG, 1)
        .option(ChannelOption.SO_KEEPALIVE, true)
        .option(ChannelOption.AUTO_CLOSE, false)
        .option(ChannelOption.TCP_NODELAY, true)
        .handler(new LoggingHandler(LogLevel.INFO))
        .childHandler(new ChannelInitializer<SocketChannel>() {
        @Override
        public void initChannel(SocketChannel ch)
            throws Exception {
            ChannelPipeline p = ch.pipeline();
            p.addLast(new TWebMessageDecoder(logger));
            p.addLast(new StringDecoder(CharsetUtil.UTF_8));
            p.addLast(serverHandler);
        }
        });
    ChannelFuture f = b.bind(Utils.getPort(getConntype(), config))
        .sync();
    f.channel().closeFuture().sync();
} catch (Exception e) {
...
} finally {
...
}
}

我得到异常:地址已在使用

这可能是可能的,但这取决于您的底层操作系统。要回答你的问题,你实际上需要理解SO_REUSEADDR选项的作用,有人已经在这里做了很好的解释:

套接字选项SO_REUSEADDR和SO_REUSEPORT,它们有什么不同?它们在所有主流操作系统中都是相同的吗?

最新更新