netty   处理远程主机强制关闭一个连接,首先看下api解释:

/**

* Returns {@code true} if and only if the channel should not close itself when its remote

* peer shuts down output to make the connection half-closed.  If {@code false}, the connection

* is closed automatically when the remote peer shuts down output.

*/

boolean isAllowHalfClosure();

/**

* Sets whether the channel should not close itself when its remote peer shuts down output to

* make the connection half-closed.  If {@code true} the connection is not closed when the

* remote peer shuts down output. Instead,

* {@link ChannelInboundHandler#userEventTriggered(ChannelHandlerContext, Object)}

* is invoked with a {@link ChannelInputShutdownEvent} object. If {@code false}, the connection

* is closed automatically.

*/

SocketChannelConfig setAllowHalfClosure(boolean allowHalfClosure);

默认是自动关闭channel,但是这样无法捕获远程主机强制关闭一个连接异常,所以 设置serverconfig

allowHalfClosure=true

这里初始化配置可以在下面的方法中处理

/**

* This method will be called once the {@link Channel} was registered. After the method returns this instance

* will be removed from the {@link ChannelPipeline} of the {@link Channel}.

*

* @param ch            the {@link Channel} which was registered.

* @throws Exception    is thrown if an error occurs. In that case it will be handled by

*                      {@link #exceptionCaught(ChannelHandlerContext, Throwable)} which will by default close

*                      the {@link Channel}.

*/

protected abstract void initChannel(Channel ch) throws Exception;

像这样:

ch.config().setAllowHalfClosure(true);

就可以在

/**

* Calls {@link ChannelHandlerContext#fireUserEventTriggered(Object)} to forward

* to the next {@link ChannelInboundHandler} in the {@link ChannelPipeline}.

*

* Sub-classes may override this method to change behavior.

*/

@Override

public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {

ctx.fireUserEventTriggered(evt);

}

中捕获远程主机强制关闭一个连接了 想这样处理,在自己的handler中重写上面的方法:

/**

* 读取数据超时   --->  断定连接断开  ----> 释放对应的socket连接

*

* 心跳处理

* 链路读写超时处理

*

* @param ctx

* @param evt

* @throws Exception sub_reactor                          ChannelInputShutdownEvent.INSTANCE

*/

@Override

public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {

try {

Channel channel = ctx.channel();

if (evt instanceof IdleStateEvent) {

IdleStateEvent e = (IdleStateEvent) evt;

if (e.state() == IdleState.READER_IDLE) {

channel.close();  //call back channelInactive(ChannelHandlerContext ctx)

if (logger.isDebugEnabled()) logger

.debug(channel.remoteAddress() + "---No data was received for a while ,read time out... ...");

} //     because we are attaching  more importance to the read_idle time(timeout to rec)

else if (e.state() == IdleState.WRITER_IDLE) { // No data was sent for a while.

channel.close();

if (logger.isDebugEnabled()) logger

.debug(channel.remoteAddress() + "---No data was sent for a while.write time out... ...");

}

} else if (evt instanceof ChannelInputShutdownEvent) {

channel.close();//远程主机强制关闭连接

}

} catch (Exception e) {

e.printStackTrace();

}

}

通过以上设置就可以捕获 并处理逻辑相关资源了 netty   处理远程主机强制关闭一个连接

java nio 强制关闭_netty 处理远程主机强制关闭一个连接相关推荐

  1. java nio 李林峰_Netty堆外内存泄漏排查,这一篇全讲清楚了

    上篇文章介绍了Netty内存模型原理,由于Netty在使用不当会导致堆外内存泄漏,网上关于这方面的资料比较少,所以写下这篇文章,专门介绍排查Netty堆外内存相关的知识点,诊断工具,以及排查思路提供参 ...

  2. java nio 李林峰_Netty 之 Java 的 I/O 演进之路

    说明 本文完全参考自<Netty权威指南(第2版)>,李林峰著. Linux 网络 I/O 模型 Linux内核将所有的外部设备都看做文件来操作,对文件的读写会调用内核的系统命令,返回一个 ...

  3. java netty 即时通讯_netty百万并发-javanetty如何处理1m连接

    在某些极端的情况下,这些语言中的每一种都不完全相同,所以我使用的Java语言,有100万个并发连接,这有点奇怪,更有希望.nginx 并发 netty并发. 这一次使用了方便的netty NIO框架( ...

  4. python远程主机强迫关闭了_Python 远程主机强迫关闭了一个现有的连接

    我并不是很明白你意思,你的socket用法我很费解.给你提供一个服务端和客户端的demo吧. server.py import socket if "__main__" == __ ...

  5. Java NIO 系列教程 转

    Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(B ...

  6. Java NIO 系列教程

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...

  7. 精讲Java NIO

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本文将有助于你学习和理解Java NIO. Java NIO提供了与标准I ...

  8. 【java】关于Java NIO的一切

    1.概述 概述:关于Java NIO的『一切』 建议看原文 太长了 本文译自Jakob Jenkov的Java NIO.注意,并非逐字翻译,删除了原文中碎碎念的部分,有些地方也加入了自己的理解. Ja ...

  9. [转]Java NIO通俗易懂简明教程

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...

最新文章

  1. Relay IR表示
  2. linux 挂载错误 mount: unknown filesystem type LVM2_member 解决方法
  3. 内核模式下的文件操作
  4. 初学者持续自我提升指南
  5. 去哪儿-04-iconsDev
  6. linux_adduser
  7. windows服务开发(一、安装)
  8. python open函数关于w+ r+ 读写操作的理解
  9. Python 中 set 的基本用法
  10. QC3.0手机充电器直接输出12V电压,自制诱骗线
  11. 分类器交叉验证java_使用交叉验证和F1分数选择SVM参数
  12. 录像机中码流类型中定时、事件、网传代表什么意思?
  13. 什么是上变频和下变频
  14. ImageIO.read(inputStream)读取.webp格式图片报错
  15. Netty4 学习笔记之三-粘包和拆包
  16. 一头 一头百兆全双工 自动协商 测试
  17. 开发人员用的提交测试环境的AutoIT脚本
  18. python快递费用计算_python调用快递鸟api实现查快递
  19. 迅为iTOP-3399平台车牌识别解决方案
  20. android 手电筒服务,Android手电筒案例

热门文章

  1. php中三个数字由小到大输出,[求助][C语言求助]输入10个数字,并将这些数字由大到小排列...
  2. iphone11看信号强度_iPhone11信号怎么样_iPhone11信号差原因|解决办法-太平洋IT百科...
  3. AI 摄像头翻车:把光头裁判误为足球,观众花钱看了个寂寞...
  4. 面试:Java 到底是值传递还是引用传递?
  5. 计算机初中教师资格教案,初中教师资格证教学设计
  6. c语言患者住院管理系统,患者住院管理系统 C,C++.doc
  7. mdpi的手机_【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi
  8. pytorch 打印模型参数
  9. pytorch android
  10. tensorflow cuda 对应版本