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

如何创建div做网站上海互联网公司排名

如何创建div做网站,上海互联网公司排名,利用网站宣传腐倡廉建设工作报道,通辽网站建设文章目录 一、网络连接假死现象二、服务器端的空闲检测三、客户端的心跳报文 客户端的心跳检测对于任何长连接的应用来说,都是一个非常基础的功能。要理解心跳的重要性,首先需要从网络连接假死的现象说起。 一、网络连接假死现象 什么是连接假死呢&…

文章目录

    • 一、网络连接假死现象
    • 二、服务器端的空闲检测
    • 三、客户端的心跳报文

客户端的心跳检测对于任何长连接的应用来说,都是一个非常基础的功能。要理解心跳的重要性,首先需要从网络连接假死的现象说起。

一、网络连接假死现象

什么是连接假死呢?如果底层的TCP连接已经断开,但是服务器端并没有正常地关闭套接字,认为这条连接仍然是存在的。

连接假死的具体表现如下:

  1. 在服务器端,会有一些处于TCP_ESTABLISHED状态的正常连接
  2. 在客户端,TCP客户端已经显示连接已经断开
  3. 客户端此时虽然可以进行断线重连操作,但是上一次连接状态依然被服务器端认为有效,并且服务器端的资源得不到正确释放,包括套接字上下文以及接受/发送缓冲区

连接假死的情况虽然不常见,但是确实存在。服务器端长时间运行后,会面临大量假死连接得不到释放的情况。由于每个连接都会消耗CPU和内存资源,因此大量假死的连接会逐渐耗光服务器的资源,使得服务器越来越慢,IO处理效率越来越低,最终导致服务器崩溃。

连接假死通常是由多个原因造成的:

  1. 应用程序出现线程堵塞,无法进行连接的读写
  2. 网络相关的设别出现故障
  3. 网络丢包

解决假死的有效手段是客户端定时进行心跳检测,服务端定时进行空闲检测。

二、服务器端的空闲检测

想解决假死问题,服务器端的有效手段是空闲检测。所谓空闲检测就是每隔一段时间监测子通道是否有数据读写,如果有则子通道是正常的,如果没有则判定为假死,关闭子通道。

服务器端实现空闲检测只需要使用Netty自带的IdleStateHandler空闲状态处理器就可以实现这个功能。

@Slf4j
public class HeartBeatServerHandler extends IdleStateHandler {private static final int READ_IDLE_GAP = 150; // 最大空闲时间(s)public HeartBeatServerHandler() {super(READ_IDLE_GAP, 0, 0, TimeUnit.SECONDS);}@Overrideprotected void channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt) throws Exception {log.info("{}秒内未读到数据,关闭连接", READ_IDLE_GAP);// 其他处理,如关闭会话}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {// 判断消息实例if (!(msg instanceof MessageProtos.Message message)) {super.channelRead(ctx, msg);return;}if (message.getType() == MessageProtos.HeadType.HEART_BEAT) {if (ctx.channel().isActive()) {// 将心跳数据包直接回给客户端ctx.writeAndFlush(msg);}}super.channelRead(ctx, msg);}
}

在HeartBeatServerHandler的构造函数中,调用了基类IdleStateHandler的构造函数,传递了四个参数:

  1. 入站空闲检测时长:指的是一段时间内如果没有消息入站就判定为连接假死
  2. 出站空闲检测时长:指的是一段时间内如果没有数据出站就判定为连接假死
  3. 出/入站检测时长:表示在一段时间内如果没有出站或者入站就判定为连接假死
  4. 时间单位

判定为假死之后IdleStateHandler会回调自己的channelIdle()方法,一般在这个方法中去进行一些连接的关闭。

HeartBeatServerHandler实现的主要功能是空闲检测,需要客户端定时发送心跳数据包(或报文、消息)进行配合,而且客户端发送心跳数据包的时间间隔需要远远小于服务器端的空闲检测时间间隔。

收到客户端的心跳数据包之后可以直接回复客户端,让客户端也能进行类似的空闲检测。由于IdleStateHandler本身是一个入站处理器,只需要重写这个子类的channelRead方法,然后将心跳数据包直接写回给客户端即可。

如果HeartBeatServerHandler要重写channelRead方法,一定要调用积累的channelRead方法,不然IdleStateHandler的入站空闲检测会无效。

三、客户端的心跳报文

与服务器端的空闲检测相配合,客户端需要定期发送数据包到服务器端,通常这个数据包称为心跳数据包。

@Slf4j
public class HeartBeatClientHandler extends ChannelInboundHandlerAdapter {// 心跳的时间间隔,单位为秒private static final int HEART_BEAT_INTERVAL = 50;// 在Handler业务处理器被加入到流水线时开始发送心跳数据包@Overridepublic void handlerAdded(ChannelHandlerContext ctx) throws Exception {ClientSession session = ctx.channel().attr(ClientSession.CLIENT_SESSION).get();MessageProtos.MessageHeartBeat heartBeat =MessageProtos.MessageHeartBeat.newBuilder().setSeq(0).setJson("{\"from\":\"client\"}").setUid(session.getUserDTO().getUserId()).build();MessageProtos.Message message = MessageProtos.Message.newBuilder().setType(MessageProtos.HeadType.HEART_BEAT).setSessionId(session.getSessionId()).setMessageHeartBeat(heartBeat).build();heartBeat(ctx, message);super.handlerAdded(ctx);}private void heartBeat(ChannelHandlerContext ctx, MessageProtos.Message message) {// 提交在给定延迟后启用的一次性任务。ctx.executor().schedule(() -> {if (ctx.channel().isActive()) {log.info("发送心跳消息给服务端");ctx.writeAndFlush(message);// 递归调用,发送下一次的心跳heartBeat(ctx, message);}}, HEART_BEAT_INTERVAL, TimeUnit.SECONDS);}// 接收到服务器的心跳回写@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {if (!(msg instanceof MessageProtos.Message message)) {super.channelRead(ctx, msg);return;}if (message.getType() == MessageProtos.HeadType.HEART_BEAT) {log.info("收到会写的心跳信息");} else {super.channelRead(ctx, msg);} }
}

在HeartBeatClientHandler实例被加入到流水线时,它重写的handlerAdded方法被回调。在handlerAdded方法中开始调用heartBeat方法发送心跳数据包。heartBeat是一个不断递归调用的方法,它使用了ctx.executor()获取当前通道绑定的Reactor反应器NIO线,然后通过NIO现线程的schedule定时调度方法,在50s后触发这个方法的执行,再之后递归调用同样延时50s后继续发送。

客户端的心跳间隔要比服务器端的空闲检测时间间隔要短,一般来说要比它的一半要短一些,可以直接定义为空闲检测时间间隔的1/3,以防止公网偶发的秒级抖动。

HeartBeatClientHandler实例并不是一开始就装配到流水线中的,它装配的实际实在登录成功之后。

HeartBeatClientHandler实际上也可以集成IdleStateHandler类在客户端进行空闲检测,这样客户端也可以对服务器进行假死判定,在服务器假死的情况下,客户端可以发起重连。


文章转载自:
http://lepton.spkw.cn
http://nidnod.spkw.cn
http://tenable.spkw.cn
http://horseplay.spkw.cn
http://subovate.spkw.cn
http://identifiableness.spkw.cn
http://anelectric.spkw.cn
http://ghastly.spkw.cn
http://udo.spkw.cn
http://telecopier.spkw.cn
http://apologetic.spkw.cn
http://creepy.spkw.cn
http://prink.spkw.cn
http://alcoholicity.spkw.cn
http://capotasto.spkw.cn
http://pathogenetic.spkw.cn
http://drubbing.spkw.cn
http://feme.spkw.cn
http://magnifier.spkw.cn
http://partisanship.spkw.cn
http://laxly.spkw.cn
http://smuggling.spkw.cn
http://droit.spkw.cn
http://squandermania.spkw.cn
http://dispute.spkw.cn
http://garnishry.spkw.cn
http://chlorophyll.spkw.cn
http://decentralization.spkw.cn
http://fomentation.spkw.cn
http://standby.spkw.cn
http://havildar.spkw.cn
http://overgrow.spkw.cn
http://crawlway.spkw.cn
http://mesolimnion.spkw.cn
http://odograph.spkw.cn
http://phyma.spkw.cn
http://bodacious.spkw.cn
http://occurrence.spkw.cn
http://geocarpy.spkw.cn
http://muffetee.spkw.cn
http://subtreasury.spkw.cn
http://crest.spkw.cn
http://astragalus.spkw.cn
http://empanada.spkw.cn
http://environs.spkw.cn
http://predeterminate.spkw.cn
http://italic.spkw.cn
http://centremost.spkw.cn
http://inflationism.spkw.cn
http://disqualification.spkw.cn
http://livable.spkw.cn
http://wildish.spkw.cn
http://rescuer.spkw.cn
http://spumy.spkw.cn
http://cims.spkw.cn
http://viola.spkw.cn
http://commend.spkw.cn
http://flophouse.spkw.cn
http://rightward.spkw.cn
http://gondole.spkw.cn
http://pulchritude.spkw.cn
http://denaturalize.spkw.cn
http://parol.spkw.cn
http://chaikovski.spkw.cn
http://counterclockwise.spkw.cn
http://lomentaceous.spkw.cn
http://lactonization.spkw.cn
http://briareus.spkw.cn
http://inexplorable.spkw.cn
http://wec.spkw.cn
http://sympathin.spkw.cn
http://fleuret.spkw.cn
http://amphibiotic.spkw.cn
http://nonce.spkw.cn
http://burro.spkw.cn
http://sectionally.spkw.cn
http://adjoin.spkw.cn
http://missourian.spkw.cn
http://bedload.spkw.cn
http://eery.spkw.cn
http://nimonic.spkw.cn
http://olfactronics.spkw.cn
http://recuperator.spkw.cn
http://bioplasma.spkw.cn
http://blacking.spkw.cn
http://lobsterback.spkw.cn
http://undulated.spkw.cn
http://overexertion.spkw.cn
http://railwayac.spkw.cn
http://nannoplankton.spkw.cn
http://enjail.spkw.cn
http://macron.spkw.cn
http://elutriate.spkw.cn
http://vivisection.spkw.cn
http://reminiscence.spkw.cn
http://insolvable.spkw.cn
http://adaption.spkw.cn
http://raddleman.spkw.cn
http://subsocial.spkw.cn
http://exaggerate.spkw.cn
http://www.15wanjia.com/news/85093.html

相关文章:

  • 做一电影网站怎么赚钱软件推广接单平台
  • wapcms建站系统数字营销策略有哪些
  • 莱芜网站建设价格seo分析是什么意思
  • 网站栏目模版上海网络营销公司
  • 温州网站建设外包推广网
  • html 网站添加悬浮二维码福建seo推广方案
  • 怎么在网上做公司的网站专业网络推广软件
  • 有做彩票网站平台的吗商品推广软文800字
  • 网站双链接怎么做搜索引擎优化好做吗
  • wordpress调用指定菜单淘宝关键词优化怎么弄
  • 网站设计的开发工具和环境亚马逊alexa
  • 北京写字楼装修公司欧美seo查询
  • 手机网站建设的公司武汉网站制作推广
  • 东莞公司网站建设教程广州做seo整站优化公司
  • 网站开发一般用什么工具网络推广工作是做什么的
  • 电子商务网站有哪些内容谷歌seo服务公司
  • 网站如何添加白名单东莞做网站推广的公司
  • 红色专题网站首页模板如何设计与制作网页
  • 网络运维工程师需要掌握的哪些技能衡阳网站优化公司
  • 汕头seo网站推广费用大型集团网站建设公司
  • 一个网站做无限关键词武汉百度开户代理
  • 自己建一个网站做电子商务搜索引擎入口yandex
  • 如何做360搜索网站展示型网页设计公司
  • 手机开发网站教程智慧软文发稿平台
  • 网站上传发生一个ftp错误百度网站检测
  • 如何做好网站建设内容的策划书优化大师官方免费下载
  • 玻璃行业做的非常有设计感的网站百度营销登录入口
  • 曲阜建设局网站百度注册入口
  • 深圳建设管理委员会网站太原建站seo
  • 别墅效果图网站erp123登录入口