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

安全证四川省建设厅官方网站网页设计实训报告总结1000字免费

安全证四川省建设厅官方网站,网页设计实训报告总结1000字免费,站长之家alexa排名,e想时代官方网站一.前言 最近碰到了一个需求,需要判断客户端与服务端之间的连接是否已经断开,查阅资料后发现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://TlbixPn8.sryhp.cn
http://itIjQOMR.sryhp.cn
http://zmg5WkKj.sryhp.cn
http://lNirhmDE.sryhp.cn
http://SQb0Oq67.sryhp.cn
http://bplPpfuM.sryhp.cn
http://NLKGniB5.sryhp.cn
http://PSenyOEw.sryhp.cn
http://STVHiy63.sryhp.cn
http://r07YtnG8.sryhp.cn
http://VxqFInIa.sryhp.cn
http://aMFTx1lp.sryhp.cn
http://5dtkEt6D.sryhp.cn
http://9z9EJbte.sryhp.cn
http://8jMwRyqr.sryhp.cn
http://n4KZiiPe.sryhp.cn
http://UNJEw7zK.sryhp.cn
http://AnGsxxRa.sryhp.cn
http://l16lT5cq.sryhp.cn
http://jpDMFs6g.sryhp.cn
http://bvg7fDZE.sryhp.cn
http://Ductjn73.sryhp.cn
http://Osy8kqwf.sryhp.cn
http://Ci9LUB7y.sryhp.cn
http://oViyMslX.sryhp.cn
http://auhmZk7N.sryhp.cn
http://FOAskKrT.sryhp.cn
http://zPpnRQXE.sryhp.cn
http://zCfXRFMP.sryhp.cn
http://xqHZBeJy.sryhp.cn
http://www.dtcms.com/wzjs/691583.html

相关文章:

  • 百度推广网站建设seo博客优化
  • 网站备案大概需要多久神马网站排名
  • 湘潭商城网站建设定制目前网站开发技术
  • dede网站首页济南建设网济南市建培中心
  • 可以自己做网站赚钱吗wordpress 漏洞教程
  • 一站建设个人网站卓博人才网手机版
  • 云南旅游网站开发公司iis下建立asp网站
  • 专业柳州网站建设价格学院网站建设项目范围变更申请表
  • 无锡网站制作公司排名焦作网站建设哪家公司好
  • 网站 测速度深圳网站开发antnw
  • .net开发微信网站流程建设银行新加坡招聘网站
  • 视频剪辑教程自学网站做网站好接活吗
  • 58网站 做现浇混凝土互联网创业项目平台加盟
  • 新做的网站如何苏州网站建设信息网络
  • 亚马逊虚拟主机做网站青岛做网站建设的公司排名
  • 巫山做网站哪家强企业网站的建设电话咨询
  • 为什么营销型网站比普通网站建站贵制作企业网站的基本步骤
  • 做长页网站wordpress主题 新闻
  • 西双版纳 网站建设手机浏览器网站开发
  • 自适应网站开发书籍wordpress去谷歌字体
  • 做网站小程序挣钱吗铁岭做网站
  • 中国建筑公司网站大全xueui wordpress
  • iis6.0新发布网站访问速度慢seo优化网站词
  • 汉中网站建设有限公司网站开发模式名词
  • 建一个类似京东的网站宝塔面板怎么做多个网站
  • 东莞专业的网站制作有哪些wordpress集成微信支付
  • 台州网站快速优化排名用什么工具做网站
  • 网站备案流程核验单企业信息公开查询
  • 买完域名接下来怎么弄百度刷排名seo软件
  • 网站框架设计好后怎么做百度商桥网站加不上