位置: IT常识 - 正文

WebSocket开发(心跳监测)功能(websocket())

编辑:rootadmin
WebSocket开发(心跳监测)功能 前言

推荐整理分享WebSocket开发(心跳监测)功能(websocket()),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:websocket开源库,websocket开源库,websocket 开发,websocket快速入门,websocket快速入门,websocket 开发,websocket 开发,websocket入门教程,内容如对您有帮助,希望把文章链接给更多的朋友!

在之前的文章中完成了客服对话的Demo功能,但是现在的连接是无限制的长时间连接没有做心跳、失活、超时断连等功能,心跳的实现方法有很多种,并且WebSocket就提供了ping/pong类型的消息。

心跳的触发方式也分两种:

客户端触发:如果是前端发送心跳,后端需要返回心跳,也就是ping pong的过程会有两次数据传递。服务端触发:后端来发送心跳的话,就只需要发送ping,前端不需要回应。

这两种后续的处理方式也有各自优缺点。

客户端触发:

优点

灵活控制无需设置主动超时逻辑清晰服务端简单缺点

两次消息传递消息内容容易篡改服务端触发:

优点

节省宽带服务端控制频率消息体固定缺点

处理逻辑复杂需要添加定时任务考虑稳定性

两种方式各有利弊,看具体的应用场景选择心跳方式是最好的,这里使用客户端触发心跳进行Demo实验,前端变更比较容易,服务端也不需要写定时等处理复杂的业务,只需要在收到固定消息后返回对应消息即可。

1. WebSocket心跳

客户端触发心跳的话就是在服务端的OnMessage事件里进行截获处理,如果是接受参数为String,就在之前的逻辑之上加上判断健康检查的逻辑,功能很简单,客户端发送了特点消息直接返回对应的消息即可。

1.1 字符串消息

WebSocket已经设计了心跳,也就是Ping/Pong,这个功能可以到达检测链接是否可用,但是如果要携带数据还是需要自己用字符串、对象的消息类型进行实现。

代码如下:

@OnMessage public void onMessage(String message, Session session,@PathParam("clientId") String clientId){ /** * 持久化 */ baseWebSocketService.saveClientSendMsg(clientId,message,new Date()); /** * 处理消息 */ UserMessageModel userMessageModel = JSONObject.parseObject(message, UserMessageModel.class); if (userMessageModel == null){ this.sendMessage(BaseResponseMessage.error(null,"传递参数结构异常")); } userMessageModel.setSendId(clientId); /** * 健康检查 */ if ("HEALTH".equals(userMessageModel.getMessage())){ this.sendText(WebSocketHealthEnum.HEALTH.result); return; } /** * 发送消息 */ HashMap<String,WebSocketClient> hashMap = webSocketClientMap.get(WebSocketTypeEnum.getAcceptType(this.type)); if (!CollectionUtils.isEmpty(hashMap)){ if (StringUtils.isEmpty(bindKfClients.get(this.clientId))){ List<UserMessageModel> list = new ArrayList(); list.addAll(baseWebSocketService.queryClientSendMsg(clientId)); list.forEach(model-> { this.toCSucceed(model); }); }else{ this.toCSucceed(userMessageModel); } }else{ baseWebSocketService.saveClientCompensateMsg(userMessageModel.getAcceptId(),message,(byte) 0); log.info("客户端:{} 发送消息到接受端:{} 不在线,放置到代发送列表,当前待发送列表:{}条",clientId,userMessageModel.getAcceptId()); this.sendMessage(BaseResponseMessage.error(null,"接收端不在线")); } }

如果客户端发送了内容HEALTH则回复对应消息,我这里回复了SUCCESS

WebSocket开发(心跳监测)功能(websocket())

但是这样有个问题,用户发送了HEALTH这个字符串服务端会将这个消息当作健康检查进行处理,而不是消息,这样影响了用户端的使用。

还记得之前预留了一个发送类型字段sendType吗,这时候这个类型就起作用了,如果要做健康检查的操作就将这个sendType设置为HEALTH,服务端根据sendType字段进行判断业务处理,修改一下代码:

/** * 健康检查 */ if (WebSocketHealthEnum.HEALTH.msg.equals(userMessageModel.getSendType())){ this.sendText(WebSocketHealthEnum.HEALTH.result); return; }1.2 Ping/Pong消息Ping的协议头是0x9,Pong的协议头是0xA控制帧最大载荷为125bytes且不能拆分

服务端可以主动发生Ping/Pong消息,之前文章中写过WebSocket发送消息的四种类型,这里将上面发送Text文本类型换成发送Ping类型的消息,当然也可以发送Pong类型的消息。

代码如下:

if (WebSocketHealthEnum.HEALTH.msg.equals(userMessageModel.getSendType())){ try { session.getBasicRemote().sendPing(ByteBuffer.wrap("SUCCESS".getBytes())); } catch (IOException e) { throw new RuntimeException(e); } return; }

Ping消息是不会被我们的OnMessage事件接收的,所以不需要特殊处理,如果是Pong消息在服务的接收是可以的。

代码如下:

@OnMessage public void onPong(PongMessage pongMessage) { ByteBuffer byteBuffer = pongMessage.getApplicationData(); }

具体的业务可以二次处理

2. 服务心跳

上面的心跳是对每个客户端的心跳监测,服务的心跳也要做,服务的心跳就简单了,前端定时请求HTTP/HTTPS协议接口。

代码如下:

@Slf4j@RestControllerpublic class CheckHealthController { @GetMapping("/health") public ResponeApi health() { log.info("健康检查chatroom-IM --> 检查成功!"); return ResponeApi.success(ResponeCodeEnum.SUCCESS,"SUCCESS"); }}

效果如下:

本文链接地址:https://www.jiuchutong.com/zhishi/299632.html 转载请保留说明!

上一篇:Window.location用法(windowlocation用法)

下一篇:Vue3.0 项目启动(打造企业级音乐App)(vue3.0启动命令)

  • 微信拍一拍炸弹特效怎么设置(微信 拍一拍 爆炸)

    微信拍一拍炸弹特效怎么设置(微信 拍一拍 爆炸)

  • 微信被对方拉黑是什么显示(微信被对方拉黑删除教你一招挽回)

    微信被对方拉黑是什么显示(微信被对方拉黑删除教你一招挽回)

  • 请不要挂机你拨打的电话正在通话是拉黑吗

    请不要挂机你拨打的电话正在通话是拉黑吗

  • 设置无法接通的号码138(设置无法接通怎么解除)

    设置无法接通的号码138(设置无法接通怎么解除)

  • 平板wps和手机wps区别(平板wps和手机一样吗)

    平板wps和手机wps区别(平板wps和手机一样吗)

  • iphone11充电98就不动了(iphone11充电到98就不动了)

    iphone11充电98就不动了(iphone11充电到98就不动了)

  • 佳能60d是全画幅的吗(佳能24-70f4)

    佳能60d是全画幅的吗(佳能24-70f4)

  • 淘宝不想退款了怎么处理(淘宝退款不想退了怎么办)

    淘宝不想退款了怎么处理(淘宝退款不想退了怎么办)

  • 网店运营是什么意思(网店运营是什么模式几乘几)

    网店运营是什么意思(网店运营是什么模式几乘几)

  • 在快手上把别人加入黑名单别人会知道吗(在快手上把别人的身份证发上去并骂人)

    在快手上把别人加入黑名单别人会知道吗(在快手上把别人的身份证发上去并骂人)

  • 乐播投屏没有投屏码(乐播投屏没有投相册)

    乐播投屏没有投屏码(乐播投屏没有投相册)

  • 华为畅享10双摄像头怎么使用(华为畅享10摄像头坏了要多少钱)

    华为畅享10双摄像头怎么使用(华为畅享10摄像头坏了要多少钱)

  • 手机伸缩摄像头的弊端(红米手机伸缩摄像头)

    手机伸缩摄像头的弊端(红米手机伸缩摄像头)

  • 通过支付宝收款码可以找到人吗(通过支付宝收款码能查到电话号码吗)

    通过支付宝收款码可以找到人吗(通过支付宝收款码能查到电话号码吗)

  • 主板上有哪些主要部件(主板上有哪些主机)

    主板上有哪些主要部件(主板上有哪些主机)

  • 手机出现耳机模式没声音怎么弄(手机出现耳机模式怎么办)

    手机出现耳机模式没声音怎么弄(手机出现耳机模式怎么办)

  • 路由器重置后上不了网怎么办(路由器重置后上网设置)

    路由器重置后上不了网怎么办(路由器重置后上网设置)

  • Reno Ace怎么设置屏幕常亮(oppo reno ace游戏模式怎么开)

    Reno Ace怎么设置屏幕常亮(oppo reno ace游戏模式怎么开)

  • 快手已戳别人怎么取消(快手上已戳别人没事吧)

    快手已戳别人怎么取消(快手上已戳别人没事吧)

  • 苹果扩容有影响吗(苹果扩容影响系统升级吗)

    苹果扩容有影响吗(苹果扩容影响系统升级吗)

  • 苹果手机电子邮件验证码在哪里看(苹果手机电子邮箱怎么弄?)

    苹果手机电子邮件验证码在哪里看(苹果手机电子邮箱怎么弄?)

  • 个人微信能用扫码枪吗(微信可以扫自己的二维码吗)

    个人微信能用扫码枪吗(微信可以扫自己的二维码吗)

  • 手机怎么查看图片大小(手机怎么查看图片的exif信息)

    手机怎么查看图片大小(手机怎么查看图片的exif信息)

  • 坚果pro2怎么无线投屏(坚果pro2s一步怎么用)

    坚果pro2怎么无线投屏(坚果pro2s一步怎么用)

  • 一般纳税人申报纳税的流程
  • 小规模纳税人收入是含税还是不含税
  • 工程管理服务属于哪个国标行业
  • 教育行业税收优势分析
  • 起重机属于固定资产哪个类别
  • 电子商业汇票怎么兑现
  • 年终销项税额要结账吗
  • 个人财产租赁所得税计算
  • 上月发票错误退回怎么做账
  • 没有认证的发票怎么做分录
  • 房屋租赁收入如何征税?
  • 住房公积金个人和单位各承担多少
  • 结存材料应分摊什么
  • 变更注册资本的股东会决议范本
  • 低值易耗品定义出处
  • 公司职员聚餐取个名字
  • 简易征收红冲报税方式是什么?
  • 工程材料发票备注栏未备注可以进成本吗
  • 递延收益的所得税影响
  • 手撕票验旧是什么意思
  • 分公司可以再开分公司吗
  • 房地产企业按照功能可分为
  • 普通股资本成本计算方法
  • 单张发票不超过1万
  • 退休人员兼职工资交税吗?
  • 特殊金融机构有哪些
  • 研发费用研究阶段的支出计入
  • 车辆保险返点计算器
  • bios设置独立显卡优先启动
  • windows10如何移动文件
  • win11虚拟键盘怎么调出来
  • php中strrev
  • linux系统之间拷贝文件命令
  • 专有技术应当得到
  • mac如何在桌面显示我的电脑
  • 微信公众平号平台
  • 鱼香肉丝的做法的教程
  • 合并报表内部交易顺流逆流
  • 房地产消防工程入什么科目
  • 清洁费用是属于什么科目
  • 维修费成本怎么结转
  • web开发 python
  • 回顾2021年作文
  • php能开发微信小程序吗
  • 金税盘抵免增值税怎么做账
  • 没进项票
  • 小规模纳税人可以开增值税专用发票吗
  • mysql版本5.5.x升级到5.6.x步骤分享
  • 公允价值变动损益属于什么科目
  • 专用发票跨月冲红流程
  • 增值税勾选统计后如何导出明细表
  • 其他收益里的政府是什么
  • 春节法定假加班费政策依据
  • 固定成本和变动成本包括哪些
  • 农业种植补贴需要审批吗
  • 企业购买商品房作为职工宿舍
  • 造价咨询费计入固定资产吗
  • 公司股权变更如何合理避税
  • 建筑公司支付给农民工的工资需要取得发票吗
  • 2021年财务新规定
  • 收到的业务赔偿如何入账
  • 跨两年的发票可以冲红吗
  • 收到同业清算互联前置如何入账
  • mysql5.5.62安装教程图解
  • win8.1怎么升级到win11
  • 解决windows update问题
  • 微软每月补丁更新一般于什么时间发布
  • xp系统还原系统
  • regsync.exe - regsync是什么进程 有什么用
  • 在windows7中,下列叙述中错误的是
  • win8网络图标不显示
  • windows7的开机启动项在哪里
  • win8怎么关闭电脑
  • shell判断文件是否存在且大小不为0
  • node.js web开发
  • 关于涉访涉诉终结的规定
  • 企业改制相关文件
  • 企业补缴公积金 归集额增加
  • 建设工程勘察设计单位可跨部门跨地区承揽勘察设计业务
  • 航信报税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设