我正在使用Netty 4.0.0.Beta2
我有一个配置了多个处理程序的管道,最后一个在自己的EventExecutorGroup中运行。有点像这样:
DefaultEventExecutorGroup separateGroup = new DefaultEventExecutorGroup();
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(AGGREGATE, new SomeHandler());
pipeline.addLast(ENCODE, new OtherHandler());
pipeline.addLast(extractEventGroup, EXECUTE, new ExecuteHandler());
然后,我将具有此管道配置的ServerBootstrap配置为ChannelInitalizer的一部分。
当服务器运行时,我会跟踪ChannelGroup中名为“channels”的所有当前客户端
稍后,当我关闭服务器时,我会刷新并关闭所有频道,然后调用
bootstrap.shutdown();
关闭了NIO EventExecutorGroup,但没有关闭我为ChannelHandler添加到管道的单独的DefaultEventExecutorGroup - 这意味着JVM不会因为线程仍处于活动状态而退出(只是等待,但不会被释放)。
我有点意外,这也没有关闭,所以我现在继续引用DefaultEventExecutorGroup并在我的bootstrap.shutdown()调用之后手动关闭它:
separateEventGroup.shutdown();
我是否遗漏了某些内容,或者这是Netty的预期行为?
答案 0 :(得分:1)
这实际上不是一个错误,而是一个预期的行为。想想运行多个协议服务器的JVM。假设这些服务器执行磁盘I / O,并且您希望限制在JVM上执行阻塞磁盘I / O的线程数。您可以为执行磁盘I / O的处理程序创建共享EventExecutorGroup
,并在JVM中的多个协议服务器上使用它。
答案 1 :(得分:-1)
我认为你是对的,这是一个错误..你能否打开一个错误报告,以便我们不要忘记解决它?