netty channel不关闭会有什么问题

 我来答
懵懂爱上她了
2016-08-26 · TA获得超过426个赞
知道答主
回答量:73
采纳率:50%
帮助的人:55.1万
展开全部
netty是一个Java nio的网络框架,它屏蔽了底层网络细节,并且非常的高效。如果你是最近要开发一个消息平台,使用netty最好不过了。
一个好的消息平台有很多需要注意的细节和应该遵守的约定准则。其中平台的优雅关闭必不可少。这个主要是避免消息丢失。那么如何做到netty的优雅关闭呢?
在netty中,接受连接请求和对请求进行业务处理分别有两个线程执行器bossExecutor 和 workerExecutor,除了关闭这两个外还需要关闭channel。
netty文档说优雅关闭需要三步:
1. unbind netty创建的所有channel。channel.unbind()
2. close netty创建的所有channel。channel.close()
3. shutdown netty的线程执行器。factory.releaseExternalResources()
对于netty生成的channel,可以使用ChannelGroup管理,很方便。
具体的代码如下:(可以参看ChannelGroup的注释)

[java] view plain copy
ChannelGroup allChannels = new DefaultChannelGroup();

public static void main(String[] args) throws Exception {
ServerBootstrap b = new ServerBootstrap(..);
...

// Start the server
b.getPipeline().addLast("handler", new MyHandler());
Channel serverChannel = b.bind(..);
allChannels.add(serverChannel);

... Wait until the shutdown signal reception ...

// Close the serverChannel and then all accepted connections.
allChannels.close().awaitUninterruptibly();
b.releaseExternalResources();
}

public class MyHandler extends SimpleChannelUpstreamHandler {
@Override
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) {
// Add all open channels to the global group so that they are
// closed on shutdown.
allChannels.add(e.getChannel());
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式