uniapp使用WebSocket断线,心跳重连机制

这篇具有很好参考价值的文章主要介绍了uniapp使用WebSocket断线,心跳重连机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

提示:我们在使用WebSocket,经常会遇到有的时候给别人发消息,别人会接收不到,这个时候就有可能是WebSocket断线了,所以这个时候心跳包就出现了


解决方案:

提示:可直接使用,记得把对应地址替换一下文章来源地址https://www.toymoban.com/news/detail-849276.html


const RECONNECT_INTERVAL = 3000; // 延迟3秒后进行重连
const HEARTBEAT_INTERVAL = 20000; // 每20秒发送一次心跳消息

export default {
    data () {
        return {
            isOpen: false, // WebSocket是否打开
            clientId: null, // 用户ID
            socketTimer: null, // 定时器
        }
    },
    methods: {
        // 发送心跳包
        startHeartbeat () {

            // HeartBeat 这里是和后端约定好的值,我们发送给后端,后端再把这个值返给我们
            // 目的就是让后端知道我们一直在
            const heartbeatMsg = 'HeartBeat';

            const sendHeartbeat = () => {
                if (this.isOpen) {
                    uni.sendSocketMessage({
                        data: heartbeatMsg,
                    }).catch(error => {
                        console.log('发送心跳消息失败:', error);
                        this.reconnect()
                    });
                }
            };
            this.socketTimer = setInterval(sendHeartbeat, HEARTBEAT_INTERVAL);
        },

        // 开始重连
        reconnect () {
            if (!this.isOpen) {
                clearTimeout(this.socketTimer);
                this.socketTimer = setTimeout(() => {
                    console.log('开始重连...');
                    this.connectWebSocket();
                }, RECONNECT_INTERVAL);
            }
        },

        // 建立WebSocket连接
        connectWebSocket () {
            const that = this;
            
            uni.connectSocket({
                // 这里的值记得替换
                url: 'ws://8.888.888.888:8081/imserver/' + that.clientId,
                header: {
                    'content-type': 'application/json'
                },
            });

            uni.onSocketOpen(res => {
                console.log('连接成功!');
                that.isOpen = true;
                that.startHeartbeat();
            });

            uni.onSocketError(res => {
                console.log('连接失败!');
                that.isOpen = false;
                that.reconnect();
            });

            uni.onSocketClose(res => {
                console.log('连接关闭!');
                that.isOpen = false;
                that.reconnect();
            });

            uni.onSocketMessage(res => {
                if (res.data === 'HeartBeat') {
                    console.log(res.data, "心跳");
                    return;
                } else {
                    const data = JSON.parse(res.data);
                    console.log(data, "有新的消息");
                }
            });
        },
    },
}

到了这里,关于uniapp使用WebSocket断线,心跳重连机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp websocket机制 心跳 重连

    在开发程序过程中通信功能还是比较常用到的,本文主要介绍的是uniapp中websocket的使用 websocket建立连接后,断开、心跳机制重新链接的一个过程。 关于uni.connectSocket可仔细阅读uniapp官网中的uni.connetSocket以及连接socket创建的实例 SocketTask   具体代码如下:内有代码详细注解,

    2024年02月12日
    浏览(40)
  • websocket断线重连&&心跳检测

    封装websocket 实现断线重连跟心态检测,使用的typeScript去封装 在nodejs 安装ws库 代码如下(示例):  服务端实现ws 创建一个server.js 文件 运行ws服务   node .server.js  客户端实现websocket 创建一个socket.ts 文件 vue 页面使用 断开ws服务 断线  启动服务后 自动重连

    2024年01月19日
    浏览(39)
  • Unity-TCP-网络聊天功能(四): 消息粘包、心跳机制保活(心跳包)、断线重连

    bug1:下线后,如果发送多条消息,在客户端上线时,一瞬间接收到,效果如同粘包,需要拆包。举例,连续发送三条160长度消息,可能实际显示2条消息,原因,第三条消息和第二条消息粘包,第二条消息长度变为320,但是Receive方法没有考虑这个问题,相当于这段代码只运行

    2024年02月11日
    浏览(39)
  • C++ Qt TCP的心跳检测机制,断线重连技术,应用层代码重新实现

    目录 前言: 一、Qt直接启动本身的KeepAlive 二、在应用层自己实现一个心跳检测  三、自定义心跳代码实现: 完整客户端服务端工程下载: 共用的结构体相关头文件:         客户端部分核心代码:         服务端部分核心代码: 运行结果展示: 前两篇关于qt tcp 相关的,

    2024年02月05日
    浏览(44)
  • uniapp websocket 封装断线重连

     1.新建一个工具类js文件 2. 把我封装的代码复制进去 我是用uniapp 的api封装的 在外面也可以直接用uniapp的api操作 只有在开始调用连接需要用封装的方法调用 在需要使用封装的方法的页面 引入js     import {         websocetObj     } from \\\"@/API/websocket.js\\\"  完善重连 在app.vue的

    2024年02月11日
    浏览(38)
  • java实现WebSocket客户端&&断线重连机制

    1、引入maven依赖(注意版本) 2、代码

    2024年02月16日
    浏览(49)
  • WebSocket心跳检测和重连机制

    心跳和重连的目的用一句话概括就是客户端和服务端保证彼此还活着,避免丢包发生。 websocket 连接断开有以下两证情况: 前端断开 在使用 websocket 过程中,可能会出现网络断开的情况,比如信号不好,或者网络临时关闭,这时候websocket的连接已经断开,而不同浏览器有不同

    2024年01月21日
    浏览(41)
  • Flutter:WebSocket封装-实现心跳、重连机制

    前言Permalink Flutter简介 Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flutter还使用 Nat

    2024年02月10日
    浏览(53)
  • WebSocket实战之六心跳重连机制

    WebSocket应用部署到生产环境,我们除了会碰到因为经过代理服务器无法连接的问题(注:该问题可以通过搭建WSS来解决,具体配置请看 WebSocket实战之四WSS配置 ),另外一个问题就是外网环境不稳定经常会断开或者服务器重启或者网络中间服务器当发现一个长连接长时间没有

    2024年02月07日
    浏览(48)
  • Android中okhttp的websocket的详细使用方法(加断线重连)

    介绍之类的就不多讲了,懒得讲也未必有别人整理的清晰,直接上代码 使用:

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包