springboot 中关闭 netty channel 连接的方法
在学习 netty 建立 tcp 通讯连接时,不同情况下收集了多个关闭 channel 的方法
#1
ctx.writeAndFlush("timeout").addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
#2
ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
#3
ctx.channel().close();
#4
ctx.close();
#1
和 #2
方法基本相同,都是先往 channel 中写入数据并刷新缓冲区,只有后续添加的处理事件不一样。
来源:ChannelFutureListener (Netty 4.1.72.Final API文档 - 即时通讯网(52im.net))
即 #1
监听 ChannelFuture ,当操作失败或者不成功的作废发生时,关闭未来 channel。
#2
监听 ChannelFuture 并关闭未来 channel。
#3
关闭当前 channel,#4
关闭当前的容器,测试发现主程序并没有受到影响,所以应该是只针对 ChannelHandlerContext。关闭了当前的 channel 所在容器,自然 channel 也会被关闭。
测试发现 #1 并没有像想象中那样使用条件,而是直接关闭连接了。使用 Unpooled.EMPTY_BUFFER
替换字符串参数是可以,或者是 byte[]
类型也可以,但直接使用字符串是不行的,需要转化为对象。