vue2 封装 webSocket 开箱即用(或 uni.connectSocket)

这篇具有很好参考价值的文章主要介绍了vue2 封装 webSocket 开箱即用(或 uni.connectSocket)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一步:

   下载 webSocket 

npm install vue-native-websocket --save

第二步:

  需要在 main.js 中 引入

import websocket from 'vue-native-websocket';
Vue.use(websocket, '', {
    connectManually: true, // 手动连接
    format: 'json', // json格式
    reconnection: true, // 是否自动重连
    reconnectionAttempts: 5, // 自动重连次数
    reconnectionDelay: 2000, // 重连间隔时间
});

 第三步:

    封装相关的连接和断开

 vue2 封装 webSocket 开箱即用(或 uni.connectSocket),websocket,vue.js,网络协议,前端,前端框架,javascript,uni-app

 相关代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

const socketService = {
    socket: null,
    init(username) {
        if (typeof WebSocket === "undefined") {
            alert("您的浏览器不支持socket");
        } else {
// ws://10.244.11.117:8089/dashboard/websocket/
            let path = "你的ws WebSocket 地址" + username; // 请求路径
            this.socket = new WebSocket(path);
            this.socket.onopen = this.open.bind(this);
            this.socket.onerror = this.error.bind(this);
            this.socket.onmessage = this.getMessage.bind(this);
        }
    },

    open() {
        console.log("socket连接成功");
    },

    error() {
        console.log("连接错误");
    },
  //这里我判断了 是不是  JSON  (要和后端定一下结构类型) (二选一)
    getMessage() {
        return new Promise((resolve, reject) => {
            this.socket.onmessage = (msg) => {
                console.log(msg.data);
                // 利用promise 返回出去结果
                if (msg.data != '连接成功' && JSON.parse(msg.data)) {
                    const data = JSON.parse(msg.data);
                    resolve(data); // 将数据传递给调用者
                }

                // this.scrollInstance.refresh(); // 手动刷新滚动效果

            };
        });
        // this.scrollInstance.refresh(); // 手动刷新滚动效果
    },
  // 也可以这样写 start (二选一)
	getMessage() {
		if (this.messageCallback) {
			this.socket.onmessage = (msg) => {
				this.messageCallback(msg.data); // 调用回调函数,并传递消息数据
			};
		}
	},
  // 也可以这样写 end
  
    send(params) {
        if (this.socket) {
            this.socket.send(params);
        }
    },

    close() {
        console.log("socket已经关闭");
    }
};
//最后导出
export default socketService;

 第四步: 

引入使用

vue2 封装 webSocket 开箱即用(或 uni.connectSocket),websocket,vue.js,网络协议,前端,前端框架,javascript,uni-app

//路径是自己的啊
import socketService from "../sokect/index";

vue2 封装 webSocket 开箱即用(或 uni.connectSocket),websocket,vue.js,网络协议,前端,前端框架,javascript,uni-app

 mounted() {
      // 调用
     this.startSocket();
  },
 methods: {

// 针对性用啊  和上方一一对应的
    async startSocket() {

      // 这里是 username  
      socketService.init("warning-all");
      try {
        const msg = await socketService.getMessage();
          //打印出来 服务器给我的信息
         console.error(JSON.parse(msg.data) );
      } catch (error) {
        console.error("Error receiving message:", error);
      }
    },

  }

// 针对性用啊    和上方一一对应的 感觉都差不多
 async startSocket() {
			socketService.init('warning-all');
			try {
				const msg = await new Promise((resolve) => {
					socketService.messageCallback = resolve; // 设置回调函数,以便获取消息数据
				});
				console.log('推送消息:', msg);
				// 在这里处理你的推送消息
			} catch (error) {
				console.error('Error receiving message:', error);
			}
		}

到这步接收信息已经OK了(记得和后端配合)


 

 使用 uni.connectSocket 进行连接

	data() {
		return {
			title: [],
			reconnectInterval: 5000
		};
	},

startSocket() {
			this.socket = uni.connectSocket({
				url: 'ws://yapi.care-bay.com/websocket/12584',
				success: () => {
					console.log('WebSocket连接已打开');
				},
				fail: (error) => {
					console.log('WebSocket连接出错', error);
					setTimeout(() => {
						console.log('尝试重新连接');
						this.startSocket();
					}, this.reconnectInterval);
				}
			});

			this.socket.onMessage((event) => {
				this.title.push(event.data);
				console.log('Received message:', event.data);
				// 在这里处理收到的消息
			});

			this.socket.onClose(() => {
				console.log('WebSocket连接已关闭');
				setTimeout(() => {
					console.log('尝试重新连接');
					this.startSocket();
				}, this.reconnectInterval);
			});
		}

 发送消息 vue-native-websocket

 第一步:按照我上面的步骤走完之后,发送信息的结果(也就是参数-和后端商量好需要哪些)

 第二步: 上代码 文章来源地址https://www.toymoban.com/news/detail-705842.html

import socketService from '../../../sokect/index'; //(自己的路径啊)
huoqu() {
			if (!this.textarea) {
				this.$message({
					message: '请填写回复的内容,谢谢',
					type: 'warning'
				});
				return;
			}
			// 构建包含所需数据的 JSON 对象 --后端商量好的参数 需要发送的 我这边根据自己的需要                      
            //定是 JSON形式的 
			const messageData = {
				nurseId: this.nurseIds,
				conversationId: this.conversationIds
			};
			if (this.stauts) {
				messageData['keyword'] = this.textarea;
			} else {
				messageData['linkUrl'] = this.textarea;
			}
			// 将 JSON 对象转换为字符串
			const messageString = JSON.stringify(messageData);
			console.log('messageData', messageString);
			// 发送消息---这边是发送信息的主要动作----OK
			socketService.send(messageString);
			// 发送成功之后 删除
			this.textarea = '';
	 
		},

到了这里,关于vue2 封装 webSocket 开箱即用(或 uni.connectSocket)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【websocket】Node+Vue2+WebSocket实现前后端通讯

    WebSocket是一个长连接,客户端可以给服务端发送消息,服务端也可以给客户端发送消息,是 全双工通信。 平时的前后端分离项目,是前端请求结果获取后端服务器数据,从而渲染到页面,服务端无法主动向客户端发起消息,某些需求场景下,一旦客户端 需要知道服务端的频

    2024年02月02日
    浏览(48)
  • vue2使用webSocket双向通讯

    基于webSocket实现双向通信,使用webworker保持心跳。 由于浏览器的资源管理策略会暂停或限制某些资源的消耗,导致前端心跳包任务时效,后端接收不到webSocket心跳主动断开,因此需要使用webworker保持心跳 引入webworker vue.config配置webworker 新增websocket.js创建websocket单例 websocket工

    2024年04月22日
    浏览(49)
  • VUE Websocket封装

    1.Websocket文件封装 在utils文件夹下面新建websocket.js文件 封装中包括websocket初始化,向后端发送消息,前端接受消息,心跳检测,关闭websocket等功能 2.websocket.js引用

    2024年02月12日
    浏览(36)
  • 前端实现websocket通信讲解(vue2框架)

    前言 :最近接到的需求是前端需要实现一个全局告警弹窗,如果使用ajax请求http接口只能用定时器定时去请求是否有告警,这样既消耗资源,又不能实时监测到告警信息。所以这个时候就可以采用websocket来实现通信,因为websocket不用请求一次才响应一次,它可以实现服务器主

    2024年02月12日
    浏览(37)
  • vue封装和使用websocket

    最近做了一个数据大屏的项目,使用了websocket来实现数据实时更新的需求,简单记录分享一下。 1、WebSocket协议是基于TCP的一种新的网络协议,允许服务端主动向客户端推送数据,实现全双工通信。 2、在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可

    2024年02月06日
    浏览(38)
  • websocket实现聊天室(vue2 + node)

    需求分析如图: 搭建的项目结构如图: 前端步骤: vue create socket_demo (创建项目) views下面建立Home , Login组件 路由里面配置路径 Home组件内部开启websocket连接 前端相关组件代码: Login组件 Home组件 router/index.js 后端步骤: 在项目外层创建server文件夹(src目录同级) npm init -y创建

    2024年01月22日
    浏览(55)
  • WebSocket全栈搭建(Java + Vue2) 上

    路途漫漫,行则将至 一般来讲,我们传统的前后端分离设计下,前后端通讯一般都是前端发送一个http请求,之后后端处理,然后返回给前端,这样的设计下,其实就是类似于一种单工的通信模式,这种模式下可能无法满足一些特定的场景: 比如我们存在一个后台的定时任务

    2024年01月17日
    浏览(34)
  • 在vue3中封装使用WebSocket

    上篇文章记录了如何在日常开发过程中引入并使用websocket连接,但是在后续的开发过程中发现之前的写法有点问题,比如说多次引用连接会共用一个心跳,如果一个连接关掉了,后续其他的连接可能被一起关掉等等的bug。 所以在这篇文章里针对上篇文章提供的方法进行改进,

    2024年02月07日
    浏览(42)
  • vue3:websocket的封装与使用

    前言:vue3+pinia项目 1.引入ws 2.新建websocket.js类 3.新建一个pinia Store类 4.页面中使用

    2024年02月02日
    浏览(38)
  • SpringBoot和Vue2集成WebSocket,实现聊天室功能

    springboot集成websocket实现聊天室的功能。如有不足之处,还望大家斧正。

    2024年01月23日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包