首页 > 其他分享 >websocket的消息丢失处理,以及前端监听心跳处理方案

websocket的消息丢失处理,以及前端监听心跳处理方案

时间:2023-11-09 10:23:45浏览次数:39  
标签:websocket 处理 前端 发送 消息 心跳 监听

消息丢失处理方案:

1、后台通过websocket传输给前端消息,并且后台生成校验此消息的定时任务,设置每5秒重发
2、前端接收到消息后将消息通过websocket传输给后台
3、后台如接收到前端的消息则删除对应的发送消息定时任务,如未收到消息则继续发送,设置最多发送5次(超过5次默认认为此条消息记录有误)
4、建议:建议websocket发送消息单独为一个模块,防止定时任务过多抢占服务内存情况发生。

前端监听心跳处理方案:

websocket连接上
1、申请一个变量heartbeatStatus,记录当前心跳检测状态,有三个状态:等待中,已收到应答、超时。
2、监听WS实例的message事件,监听到就将heartbeatStatus改为:已收到应答。
3、监听WS实例的open事件,打开后启动心跳检测。

一般需要在计时器中监听,定时发送心跳检测信息,服务器端接收到心跳包信息,通过websocket发送信息给客户端,客户端修改心跳状态;如果两个以上的心跳包都没有得到反馈,则表示掉线,需要重新连接websocket。

// 发送消息,用来发送心跳包
WS.send('hello'); 
// 关闭连接,当发送心跳包不响应,需要重连时,最好先关闭
WS.close();

注意:
心跳检测异常,但close事件没有触发,大概率是双方之间的网络线路不佳,如果立马进行重连,会挤兑更多的网络资源,重连的失败概率更大,也可能阻塞用户的其它操作。

但也不排除确实是连接的问题,如服务器宕机、意外重启,同时没有告知浏览器需要把旧连接关闭。

所以一发生心跳不应答,个人推荐的做法是,发生延迟后,提醒用户网络异常正在修复中,让用户有个心理准备。然后多发一两个心跳包,连续不应答再提示用户掉线了,是否重连。如果中途正常了,就不需要重连,用户体验更好,对服务器的压力也更小。

 

标签:websocket,处理,前端,发送,消息,心跳,监听
From: https://www.cnblogs.com/zha-hdlxdl/p/17819090.html

相关文章

  • Linux文件管理知识:文本处理
    上篇文章详细介绍了Linux系统中查找文件的工具或者命令程序的相关操作内容介绍。那么,今天呢,这篇文章围绕Linux系统中文本处理来阐述。 众所周知,所有Linux操作系统都离不开一个核心原则,那就是它是由很多种文件组成的,那么,Linux系统的任何操作就离不开文本文件的处理。所以,它有很......
  • ChatGLM.cpp的量化处理
    chatglm.cpp的一个主要特点就是以量化的形式对大模型进行优化,使其在CPU上能够进行高效推理。本文主要查看chatglm.cpp是如何对模型进行量化的chatglm.cpp在使用时主要分成两步:使用convert.py将模型进行量化,得到ggml格式使用./build/bin/main进行模型调用convert.py截至......
  • 无涯教程-批处理 - Right String函数
    这用于从字符串末尾提取字符。RightString-示例@echooffsetstr=Thismessageneedschanged.echo%str%setstr=%str:~-8%echo%str%关于上述程序,需要注意的关键是,使用〜-"要提取的字符数"运算符来提取字符串的右边。上面的命令产生以下输出。Thismessagene......
  • 无涯教程-批处理 - Replace a String函数
    要将子字符串替换为另一个字符串,请使用字符串替换功能。ReplaceaString-示例@echooffsetstr=Thismessageneedschanged.echo%str%setstr=%str:needs=has%echo%str%关于上述程序,需要注意的关键是,该示例通过语句%str:needs=has%用字符串"has"替换了"needs"......
  • 无涯教程-批处理 - Remove All Spaces函数
    这用于通过替换删除字符串中的所有空格。RemoveAllSpaces-示例@echooffsetstr=Thisstringhasalotofspacesecho%str%setstr=%str:=%echo%str%关于上述程序,需要注意的关键是::=运算符用于删除字符串中的所有空格。上面的命令产生以下输出。Th......
  • 深度解析自然语言处理之篇章分析
    在本文中,我们深入探讨了篇章分析的概念及其在自然语言处理(NLP)领域中的研究主题,以及两种先进的话语分割方法:基于词汇句法树的统计模型和基于BiLSTM-CRF的神经网络模型。关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复......
  • 深度解析自然语言处理之篇章分析
    在本文中,我们深入探讨了篇章分析的概念及其在自然语言处理(NLP)领域中的研究主题,以及两种先进的话语分割方法:基于词汇句法树的统计模型和基于BiLSTM-CRF的神经网络模型。关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,......
  • 智安网络|探索人机交互的未来:自然语言处理的前沿技术
    自然语言处理是人工智能领域中研究人类语言和计算机之间交互的一门学科。它涉及了语言的理解、生成、翻译、分类和摘要等多个方面。随着人们对自然语言处理的重视和需求不断增长,成为了热门的研究方向。首先,我们需要了解自然语言处理的基本概念。自然语言是人类日常交流的语言,如中文......
  • 无涯教程-批处理 - Remove函数
    字符串替换功能还可用于从另一个字符串中删除子字符串。Remove-示例@echooffsetstr=Batchscriptsiseasy.Itisreallyeasy.echo%str%setstr=%str:is=%echo%str%关于上述程序,需要注意的关键是,使用:'stringtoberemoved'=command从字符串中删除了"is"一词......
  • mybatis在xml文件中处理大于号小于号的方法
    第一种方法:用了转义字符把>和<替换掉,然后就没有问题了。SELECT*FROMtestWHERE1=1ANDstart_date <=CURRENT_DATEANDend_date>=CURRENT_DATE附:XML转义字符           <                     ......