【发布时间】:2014-12-14 19:06:12
【问题描述】:
我试图在我的项目中理解和使用 Netty,所以从 Netty 用户指南中的基本 DiscardServer 示例开始。
下面几乎是原始代码的复制粘贴...
public void run() throws Exception {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap sb = new ServerBootstrap();
sb.group(bossGroup, workerGroup);
sb.channel(NioServerSocketChannel.class);
sb.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new DiscardServerHandler());
}
});
// Set some socket options such as socket queue backlog and keepalive.
sb.option(ChannelOption.SO_BACKLOG, 128);
sb.childOption(ChannelOption.SO_KEEPALIVE, true);
// bind to port and start listening.
ChannelFuture f = sb.bind(port).sync();
} finally {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
当我创建一个 main 方法时,如下所示,它运行良好,但随后就被终止了。
public static void main(String[] args) throws Exception {
int port = Integer.parseInt(args[0]);
System.out.println("Starting discard server...");
new DiscardServer(port).run();
System.out.println("Discard server returning...");
}
程序输出为:
开始丢弃服务器... 丢弃服务器返回...
然后程序终止。
我期望 netty 类中的事件循环应该成为我的服务器,但它似乎并没有那样发生。我应该在我的 main 方法中编写一个 while 循环来确保我的服务器继续运行吗?
更新:
如果我使用 Netty 4.x 系列的 jar 文件,同样的程序可以完美运行。我认为第 5 版仍在不断发展,因此预计会出现错误。
【问题讨论】:
标签: netty