我需要使用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,它们有什么不同?它们在所有主流操作系统中都是相同的吗?