首页 > 其他分享 >vue.js客服系统实时聊天项目开发(十六)连接websocket实时处理消息,断线重连,处理服务端关闭指令

vue.js客服系统实时聊天项目开发(十六)连接websocket实时处理消息,断线重连,处理服务端关闭指令

时间:2023-01-31 16:46:11浏览次数:52  
标签:vue WebSocket console js ws websocket 重连 连接

在线即时聊天项目,最重要的就是要实时收到消息,这里实现了vue.js下的websocket,实现了断线重连,并且可以根据收到的消息进行对应的处理

 

 

 

            /**
             * 连接websocket
             */
            connect () {
                var _this=this;
                let ws = new WebSocket(this.WebsocketHost+`/ws_visitor?visitor_id=${this.visitor.visitor_id}&to_id=${this.visitor.to_id}`);
                ws.onopen = function () {
                    console.log('WebSocket 连接已打开');
                    //_this.reconnectTimes = 0;
                };
                ws.onerror = function () {
                    console.log('WebSocket 连接错误');
                    // 尝试重连
                    _this.reconnect();
                };
                ws.onclose = function () {
                    console.log('WebSocket 连接已关闭');
                    // 尝试重连
                    _this.reconnect();
                };
                ws.onmessage = function (event) {
                    console.log(`收到服务器的消息:${event.data}`);
                    let result=event.data;
                    let serverMessage=JSON.parse(result);
                    let type=serverMessage.type;
                    let data=serverMessage.data;
                    if(type=="message"){
                        _this.receiveMessage(data);
                    }
                    if(type=="close"||type=="force_close"){
                        _this.websocket.serverReturnClose=true;
                        _this.websocket.instance.close();
                    }
                };
                _this.websocket.instance=ws;
            },
            // 尝试重连
            reconnect(){
                var _this=this;
                if (_this.websocket.serverReturnClose) {
                    console.log('停止重连,服务端close指令');
                    return;
                }
                if (_this.websocket.RECONNET_TIMES >= _this.websocket.MAX_RECONNECT_TIMES) {
                    console.log('重连失败');
                    return;
                }
                _this.websocket.RECONNET_TIMES++;
                console.log(`正在尝试重连(第 ${_this.websocket.RECONNET_TIMES} 次)`);
                setTimeout(function () {
                    _this.connect();
                }, _this.websocket.RECONNECT_INTERVAL); 
            }

这段代码是 Vue.js 组件中用于实现 WebSocket 的代码。它有三个方法:

  1. connect:连接 WebSocket。它使用 WebSocket 对象创建了一个新的 WebSocket 连接,并为该连接设置了 onopen、onclose、onmessage 三个事件的回调。

  2. onopen:连接 WebSocket 成功的回调。它会在 WebSocket 连接建立成功时被调用,在控制台输出 'WebSocket 连接已打开'。

  3. onclose:WebSocket 连接关闭的回调。它会在 WebSocket 连接关闭时被调用,在控制台输出 'WebSocket 连接已关闭',并且会调用 reconnect 方法进行重连。

  4. onmessage:WebSocket 接收到服务器消息的回调。它会在收到服务器发送的消息时被调用,在控制台输出 '收到服务器的消息:' 和消息内容。该方法会对收到的消息进行分类,如果消息类型是 message,则调用 receiveMessage 方法进行处理;如果是 close 或者 force_close,则设置 websocket.serverReturnClose 为 true,并调用 close 方法关闭 WebSocket 连接。

  5. reconnect:WebSocket 重连方法。当 WebSocket 连接关闭时,如果 websocket.serverReturnClose 为 true,则不进行重连;否则,如果重连次数大于最大重连次数,则不进行重连;

唯一在线客服系统

https://gofly.v1kf.com

标签:vue,WebSocket,console,js,ws,websocket,重连,连接
From: https://www.cnblogs.com/taoshihan/p/17079704.html

相关文章

  • JS常见错误和解决方法集锦
    hello大家好,很多同学使用webfunny前端监控系统也有一段时间了,发现在js错误统计功能中遇到了一些问题,不知道该如何下手解决。前端监控平台只是一个辅助工具(并非神器),正常情况......
  • vue2
    前端工程化:前端工程化是指:在企业级的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。四个化:模块化:js的模块化,css的模块......
  • vue3 el-cascader 实现 一级单选 ,二级多选,只能选择三个
    实现效果如下思路是1.选择一个时,取出一级选中值code,首先把一级中code不是选中code的置灰,实现一级单选2.当选择二级时,选中数组长度大于等于三,则把当前二级数据(不是选中......
  • Js/Jquery 操作 url
    <script>//设置或获取整个URL为字符串//文件访问file:///F:/phpStud/PHPTutorial/WWW/CasPHP/public/js/js_url.html//域名访问http://casphp.......
  • vue 不同路由模式,部署时,nginx的不同配置
    hash模式路由配置如下:location/{rootfont;indexindex.htmlindex.htm;}history模式路由配置如下:location/{rootfont;index......
  • JSON
    JSON用于数据载体,在网络中进行数据传输JSON基础语法var变量名={"key":value,"num":23,"str":"","flag":true,"array":[],"obj":{}}......
  • JS语言简介
    JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript......
  • 技术汇总:第五章:使用angularjs做首页三级分类
    页面:<scripttype="text/javascript"src="plugins/angularjs/angular.min.js"></script><scripttype="text/javascript"src="js/service/userService.js"></scri......
  • Next.js @reduxjs/toolkit redux-persist 之 6.0.0 版本持久化处理
    集成公共状态管理插件@reduxjs/toolkitreact-reduxredux-persiststore之index.ts代码import{configureStore}from'@reduxjs/toolkit'import{useSel......
  • vue.js客服系统实时聊天项目开发(十五)实现聊天界面滚动到底部
    在进入在线聊天界面以后,不管是历史消息,还是实时消息,都需要让最新消息展示出来。因此需要把聊天界面滚动到最底部  //滚动到底部scrollBot......