java nio 强制关闭_netty 处理远程主机强制关闭一个连接
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 处理远程主机强制关闭一个连接相关推荐
- java nio 李林峰_Netty堆外内存泄漏排查,这一篇全讲清楚了
上篇文章介绍了Netty内存模型原理,由于Netty在使用不当会导致堆外内存泄漏,网上关于这方面的资料比较少,所以写下这篇文章,专门介绍排查Netty堆外内存相关的知识点,诊断工具,以及排查思路提供参 ...
- java nio 李林峰_Netty 之 Java 的 I/O 演进之路
说明 本文完全参考自<Netty权威指南(第2版)>,李林峰著. Linux 网络 I/O 模型 Linux内核将所有的外部设备都看做文件来操作,对文件的读写会调用内核的系统命令,返回一个 ...
- java netty 即时通讯_netty百万并发-javanetty如何处理1m连接
在某些极端的情况下,这些语言中的每一种都不完全相同,所以我使用的Java语言,有100万个并发连接,这有点奇怪,更有希望.nginx 并发 netty并发. 这一次使用了方便的netty NIO框架( ...
- python远程主机强迫关闭了_Python 远程主机强迫关闭了一个现有的连接
我并不是很明白你意思,你的socket用法我很费解.给你提供一个服务端和客户端的demo吧. server.py import socket if "__main__" == __ ...
- Java NIO 系列教程 转
Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(B ...
- Java NIO 系列教程
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...
- 精讲Java NIO
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本文将有助于你学习和理解Java NIO. Java NIO提供了与标准I ...
- 【java】关于Java NIO的一切
1.概述 概述:关于Java NIO的『一切』 建议看原文 太长了 本文译自Jakob Jenkov的Java NIO.注意,并非逐字翻译,删除了原文中碎碎念的部分,有些地方也加入了自己的理解. Ja ...
- [转]Java NIO通俗易懂简明教程
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...
最新文章
- Relay IR表示
- linux 挂载错误 mount: unknown filesystem type LVM2_member 解决方法
- 内核模式下的文件操作
- 初学者持续自我提升指南
- 去哪儿-04-iconsDev
- linux_adduser
- windows服务开发(一、安装)
- python open函数关于w+ r+ 读写操作的理解
- Python 中 set 的基本用法
- QC3.0手机充电器直接输出12V电压,自制诱骗线
- 分类器交叉验证java_使用交叉验证和F1分数选择SVM参数
- 录像机中码流类型中定时、事件、网传代表什么意思?
- 什么是上变频和下变频
- ImageIO.read(inputStream)读取.webp格式图片报错
- Netty4 学习笔记之三-粘包和拆包
- 一头 一头百兆全双工 自动协商 测试
- 开发人员用的提交测试环境的AutoIT脚本
- python快递费用计算_python调用快递鸟api实现查快递
- 迅为iTOP-3399平台车牌识别解决方案
- android 手电筒服务,Android手电筒案例
热门文章
- php中三个数字由小到大输出,[求助][C语言求助]输入10个数字,并将这些数字由大到小排列...
- iphone11看信号强度_iPhone11信号怎么样_iPhone11信号差原因|解决办法-太平洋IT百科...
- AI 摄像头翻车:把光头裁判误为足球,观众花钱看了个寂寞...
- 面试:Java 到底是值传递还是引用传递?
- 计算机初中教师资格教案,初中教师资格证教学设计
- c语言患者住院管理系统,患者住院管理系统 C,C++.doc
- mdpi的手机_【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi
- pytorch 打印模型参数
- pytorch android
- tensorflow cuda 对应版本