位置: 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启动命令)

  • 微信营销的误区(微信营销的误区是什么)

    微信营销的误区(微信营销的误区是什么)

  • 诺基亚n82多少钱(诺基亚n82怎么样)(诺基亚n82021参数配置)

    诺基亚n82多少钱(诺基亚n82怎么样)(诺基亚n82021参数配置)

  • 微机的字长是什么(微机字长怎么计算)

    微机的字长是什么(微机字长怎么计算)

  • qq好友添加历史怎么看(qq好友添加历史最早可以查看多久的)

    qq好友添加历史怎么看(qq好友添加历史最早可以查看多久的)

  • 谷歌一直在核对信息怎么解决(谷歌一直在核对信息怎么解决小米)

    谷歌一直在核对信息怎么解决(谷歌一直在核对信息怎么解决小米)

  • 小米mix2s不能闪充了(小米mix2s闪屏)

    小米mix2s不能闪充了(小米mix2s闪屏)

  • 电话没人接会是什么情况(电话没人接会是拉黑吗)

    电话没人接会是什么情况(电话没人接会是拉黑吗)

  • 手机卡槽用力捅会坏吗(手机卡槽孔用力捅会坏吗)

    手机卡槽用力捅会坏吗(手机卡槽孔用力捅会坏吗)

  • 在京东买了东西为什么没有信息(在京东买了东西怎么退)

    在京东买了东西为什么没有信息(在京东买了东西怎么退)

  • 3500x支持内存频率(3500x可以用2400内存条吗)

    3500x支持内存频率(3500x可以用2400内存条吗)

  • 6核12线程是什么意思(6核12线程和6核6线程)

    6核12线程是什么意思(6核12线程和6核6线程)

  • 快手注销账号以后还能再注册吗(快手注销账号以后会怎样)

    快手注销账号以后还能再注册吗(快手注销账号以后会怎样)

  • 奔腾g4400能换什么cpu(奔腾g4400多少针脚)

    奔腾g4400能换什么cpu(奔腾g4400多少针脚)

  • 抖音怎么更换登录账号(抖音怎么更换登录)

    抖音怎么更换登录账号(抖音怎么更换登录)

  • 快手亲密值怎么增加快(快手亲密值怎么二倍加速)

    快手亲密值怎么增加快(快手亲密值怎么二倍加速)

  • 微信连续加多少人会被限制(微信连续加多少个好友就要频繁操作被锁住)

    微信连续加多少人会被限制(微信连续加多少个好友就要频繁操作被锁住)

  • 电脑文件怎么打包发送(电脑文件怎么打勾勾)

    电脑文件怎么打包发送(电脑文件怎么打勾勾)

  • ip68级防水有多强(ip68级防水是多少米)

    ip68级防水有多强(ip68级防水是多少米)

  • 美版苹果11是双卡吗(美版苹果11是双扬声器吗)

    美版苹果11是双卡吗(美版苹果11是双扬声器吗)

  • 小新14和小新air14有什么区别(小新14和小新air14键盘一样吗)

    小新14和小新air14有什么区别(小新14和小新air14键盘一样吗)

  • 如何找快手同乡服务(在快手同城怎么样找自己)

    如何找快手同乡服务(在快手同城怎么样找自己)

  • 华硕主板怎么禁用uefi(华硕主板怎么禁用声卡)

    华硕主板怎么禁用uefi(华硕主板怎么禁用声卡)

  • Mac怎么连接校园网?苹果电脑系统设置可实现连接校园网方法步骤介绍(mac怎么连接校园网网线)

    Mac怎么连接校园网?苹果电脑系统设置可实现连接校园网方法步骤介绍(mac怎么连接校园网网线)

  • csrsc.exe是一个安全的进程吗 csrsc进程危险吗(csrrs.exe)

    csrsc.exe是一个安全的进程吗 csrsc进程危险吗(csrrs.exe)

  • 目标检测算法——垃圾分类数据集汇总(附下载链接)(目标检测算法的主要目的是找到图像中用户感兴趣的)

    目标检测算法——垃圾分类数据集汇总(附下载链接)(目标检测算法的主要目的是找到图像中用户感兴趣的)

  • css添加边框阴影(css添加边框阴影 立体效果)

    css添加边框阴影(css添加边框阴影 立体效果)

  • nl命令-显示文件内容及行号(用命令ls-al显示出文件ff)

    nl命令-显示文件内容及行号(用命令ls-al显示出文件ff)

  • 金税盘技术维护费
  • 累计交税如何计算?
  • 新购车辆车船税多少钱
  • 哪些税种属于中央固定收入
  • 购买地瓜
  • 对公账户转到个人账号能提供发票吗?
  • 财政拨款结余明细科目编码
  • 个人打钱对公账户,可以算公司营业收入吗
  • 月末 存款
  • 科目余额表一定要编吗
  • 外地建筑工程开票流程
  • 收到的增值税
  • 新准则 开办费
  • 加工生产产品的地方 用两个字形容
  • 小企业净资产收益率
  • 借给股东的借款怎么做账
  • 应收账款现金收回金额有限制嘛
  • 营业外支出税前扣除比例是多少
  • 委托、受托出口做账有哪些事项?
  • 无偿代建政府公告
  • 专票怎么提交不上去
  • 工资哪些扣款应该扣税
  • 每月案例分析
  • 河北省东光县是哪个城市
  • 充值单据怎么开发票
  • 增值税普通发票有什么用
  • 一般纳税人专票和普票有什么区别
  • 纳税所得额怎么算个税
  • 现金清查制度的内容包括
  • 融资租赁的利息可以税前扣除吗
  • windows 发布时间
  • 清理血管垃圾最有效的食物
  • 什么叫资金预算
  • 我想测试一下网速
  • php数组原理
  • 微软windows11正式版下载
  • linux中cut命令详解
  • 天竺葵的养殖方法和繁殖方法
  • 哈勃太空望远镜取得的部分成果有哪些
  • 企业和单位往来怎么做账
  • php文件操作小结怎么写
  • 企业所得税营业外收入
  • 冲红的销项税怎么结转
  • 普通纳税人怎么交税
  • Ubuntu18.04配置允许远程访问
  • 最新的目标检测算法2020
  • 审图费谁出
  • 领用发票后
  • 研发费用归集范围有哪些
  • 个人所得税其他扣除300一个月
  • 发票已认证未抵扣,开红字发票信息表后,愿票需要退回吗
  • sql将一个表中的值赋给另一个表
  • 软件研发费用怎么做账
  • 定期定额怎么申报个人所得税
  • 非营利性养老院收费标准一般是多少
  • 一般纳税人购买原材料会计分录
  • 应付款多付了不可退回怎么做会计分录
  • 应付职工薪酬包括辞退福利吗
  • 企业中的消费环境分析
  • 营业外收入是否影响营业利润
  • 红冲发票需要收回原发票吗 税屋
  • 贴现办理流程
  • 会计收入的定义和分类
  • vb.net invoke
  • mysql explain的用法(使用explain优化查询语句)
  • window怎么样
  • ipad文件使用技巧
  • VMware虚拟机安装Android系统
  • 进入bios设置u盘启动
  • win8调分辨率
  • win10升级电脑
  • macbookpro4399小游戏
  • 重装win7系统后鼠标键盘不能用
  • dota2 服务器ip地址
  • 网页设计中的几种齐方式及其特点
  • digitalocean收费
  • 工会经费扣除标准2022
  • 杭州市税务局总局地址
  • 税务补录什么时候上班
  • 广州市国税咨询电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设