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

时间:2016-08-29 13:51:33

标签: 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 {
...
}
}

我收到异常:地址已在使用中

1 个答案:

答案 0 :(得分:0)

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

Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?