当前位置: 首页 > wzjs >正文

小程序 网站 开发通辽住房和城乡建设厅网站

小程序 网站 开发,通辽住房和城乡建设厅网站,沈阳建设工程信息网下载,手机网站智能建站一.前言 最近碰到了一个需求,需要判断客户端与服务端之间的连接是否已经断开,查阅资料后发现Netty提供了如下几种方式,现总结如下,方便后续查看。 二.存活检测方式 2.1 SO_KEEPALIVE选项 Netty提供了SO_KEEPALIVE选项&#xf…

一.前言

最近碰到了一个需求,需要判断客户端与服务端之间的连接是否已经断开,查阅资料后发现Netty提供了如下几种方式,现总结如下,方便后续查看。

二.存活检测方式

2.1 SO_KEEPALIVE选项

Netty提供了SO_KEEPALIVE选项,当连接保持空闲一段时间时,TCP 会自动向远程对等方发送保持活动探测。但由于该时间间隔依赖于操作系统(通常默认值为2小时),因此此种方式不太被推荐使用。

2.2 IdleStateHandler

Channel在一段时间内没有执行读或写操作时,会触发IdleStateEvent

IdleStateHandler关于读写空闲多久触发IdleStateEvent包含如下三个参数:

  • readerIdleTime:读空闲时间, 超过设定的时间,会触发IdleState.READER_IDLE,若设置为0表示禁用。
  • writerIdleTime:写空闲时间, 超过设定的时间,会触发IdleState.WRITE_IDLE,若设置为0表示禁用。
  • allIdleTime:读写都空闲时间,超过设定时间,会触发IdleState.ALL_IDLE,若设置为0表示禁用。

上述IdleStateEvent可以在方法public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception中捕获。

下面是一个客户端应用IdleStateHandler的示例,在该示例中,若30秒没有读写事件时,客户端会连续向服务端发送 3次PING,每次间隔10秒,若期间收到了服务端回复的PING_ACK则表明连接还存在,否则直接关闭该连接。

public class NettyRWTimeoutClient {private static final int PORT = 8080;public static void main(String[] args) {EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap bootstrap = new Bootstrap();bootstrap.group(group).channel(NioSocketChannel.class).handler(new ChannelInitializer<NioSocketChannel>() {@Overrideprotected void initChannel(NioSocketChannel ch) {ChannelPipeline pipeline = ch.pipeline();pipeline.addLast(new StringDecoder(StandardCharsets.UTF_8));pipeline.addLast(new StringEncoder(StandardCharsets.UTF_8));// 30s内读写都空闲, 触发 IdleStateEventpipeline.addLast(new IdleStateHandler(0, 0, 30, TimeUnit.SECONDS));pipeline.addLast(new ClientHandler());}});ChannelFuture future = bootstrap.connect("localhost", PORT).sync();future.channel().closeFuture().sync();} catch (InterruptedException e) {e.printStackTrace();} finally {group.shutdownGracefully();}}
}class ClientHandler extends SimpleChannelInboundHandler<String> {private final int maxPingAttempts = 3; // 最多发送3次PINGprivate int pingCount = 0;private int pingTimeInterval = 10; // 每隔10s发送一次PINGprivate ScheduledFuture<?> pingTask;@Overridepublic void channelRead0(ChannelHandlerContext ctx, String msg) {if ("PING_ACK".equals(msg)) {System.out.println("Received PING_ACK from server");pingCount = 0; // PING_ACK, 重置Ping计数if (pingTask != null) {pingTask.cancel(false); // 取消后续PING任务pingTask = null;}} else {System.out.println("Received: " + msg);}}@Overridepublic void userEventTriggered(ChannelHandlerContext ctx, Object evt) {if (evt instanceof IdleStateEvent) {IdleStateEvent event = (IdleStateEvent) evt;if (event.state() == IdleState.ALL_IDLE) {sendPingToServer(ctx);}}}private void sendPingToServer(ChannelHandlerContext ctx) {if (pingTask != null) {return; // 任务已在进行中}System.out.println("start send PINT To Server");pingTask = ctx.executor().scheduleAtFixedRate(() -> {if (pingCount < maxPingAttempts) {System.out.println("Sending PING " + (pingCount + 1));ctx.writeAndFlush("PING");pingCount++;} else {System.out.println("No response after " + maxPingAttempts + " PINGs, closing connection.");ctx.close();pingTask.cancel(false);}}, 0, pingTimeInterval, TimeUnit.SECONDS); // 每10s发送一次 PING}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {cause.printStackTrace();ctx.close();}
}

三.结语

上述博文在完成的过程中参考了如下资料:

  • Reactor Netty Reference Guide
  • Using Netty, understand its connection idle handling
  • Netty 官方文档——ReadTimeoutHandler

以上便是本文的全部内容,如果觉得不错可以支持一下博主,若有任何问题也敬请批评指正。


文章转载自:

http://bJSQjaou.mzhhr.cn
http://XfSsP7TY.mzhhr.cn
http://3JcQzWi9.mzhhr.cn
http://Wbn9t5Ee.mzhhr.cn
http://pVDCFxgA.mzhhr.cn
http://NRXXgA67.mzhhr.cn
http://ypi4x4cj.mzhhr.cn
http://vbLSghFo.mzhhr.cn
http://3SrAgNKT.mzhhr.cn
http://JqJe8HtQ.mzhhr.cn
http://jPhF1yNi.mzhhr.cn
http://ga8qbjzw.mzhhr.cn
http://kJUr8eoU.mzhhr.cn
http://MkLhWg29.mzhhr.cn
http://g8H5195B.mzhhr.cn
http://OCaHRyIE.mzhhr.cn
http://wajp2QgM.mzhhr.cn
http://n8NVKrfs.mzhhr.cn
http://qUD4Kcp7.mzhhr.cn
http://qkj99ksF.mzhhr.cn
http://FNC89tgL.mzhhr.cn
http://TazHJEiF.mzhhr.cn
http://thDzWvO6.mzhhr.cn
http://LYfLKWwA.mzhhr.cn
http://4UMrTzFi.mzhhr.cn
http://GbHOVKUW.mzhhr.cn
http://zQzaiJOW.mzhhr.cn
http://me5SFTFu.mzhhr.cn
http://qL5G93S6.mzhhr.cn
http://YUw4R3vg.mzhhr.cn
http://www.dtcms.com/wzjs/740801.html

相关文章:

  • 手机网站的优势品牌网站建设 t磐石网络
  • 懂得网站推广宁波seo推广报价多少
  • 大庆企业做网站wordpress微信图片采集
  • 完成一份网站建设前期规划方案随机图片网站
  • 广东深圳网站建设方便成都知名网站推广
  • 如何判断网站是否被百度降权网站开发辅助工具
  • 什么系统做购物网站好dt模板网
  • 上市公司查询网站网络舆情分析
  • 山西建设网站公司瑞安机械网站建设
  • 如何架设个人网站公司logo墙设计图片
  • 网站分页效果企业seo可以达到怎样的效果
  • 在家帮别人做网站赚钱一个网站做三个关键词
  • 做个产品网站要多少钱中国十大电商平台
  • 精美旅游网站案例cfensi.wordpress
  • 嘉兴网站建设托管做个网站大约多少钱
  • 开发公司总工岗位职责郑州seo代理公司
  • 西安网站建设需要多少钱网站Api接口怎么做
  • apache搭建wordpress长春做网站优化哪家好
  • 云南省建设厅网站处长旧电脑做php网站服务器
  • 手机免费注册网站官方网站建站
  • 想要黑掉一个网站 要怎么做php cms网站建设
  • 安装多个wordpress站点中国建设网app
  • 做方案收集图片的网站c# 网站开发框架
  • 网站跟信息推广有哪些信息化建设深圳遗像制作
  • 电子商务网站建设教程试卷东阳市网站建设制作
  • 手机网站被自动跳转html手机网站
  • 简单网站首页怎么做用xp做网站是否先搭建iis
  • 挂马网站教程益阳建设企业网站
  • 山东省建设监理协会网站6做团建活动网站
  • 企业建设网站的步骤使用wordpress建立个人网站