Vue中如何使用websocket
2019-07-03 16:26
295 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21692693/article/details/94571163
1新建文件夹 socket.js(目录自己看着办,可以放lib或者utils)
[code]import Vue from 'vue' const ReconnectingWebSocket = require('@/api/webSocket/reconnecting-websocket.min.js') // https://github.com/joewalnes/reconnecting-websocket /** * @param {params.userId} string 用户id */ export default function initWebSocket (params) { // 初始化weosocket let port = '8888' //测试:端口 let uri = '192.168.**.**' // 测试 地址 let url = `ws://${uri}:${port}/${params.userId}` if ('WebSocket' in window) { Vue.prototype.$socket = new ReconnectingWebSocket(url, null, { debug: false, // console.debug()记录调试消息 automaticOpen: true, // 实例化后立即连接 ws.open()和 ws.close() 可以手动管理 reconnectInterval: 1000, // 重新连接延迟时间 maxReconnectInterval: 2000, // 等待重连最长时间 reconnectDecay: 1, // 延迟重连时间的增加率 timeoutInterval: 3000, // 在关闭和重试之前等待连接成功的最长时间 maxReconnectAttempts: null, // 最大尝试重连次数 binaryType: 'blob' // 二进制类型 }) Vue.prototype.$socket.sendObj = (data) => { Vue.prototype.$socket.send(JSON.stringify(data)) } } else { alert('您的浏览器不支持 WebSocket!') } }
2 reconnecting-websocket.min.js下载地址 https://github.com/joewalnes/reconnecting-websocket
3如何去使用,首先上面的userId是用户登录之后返回的数据,用于建立websocket连接,login.vue中this.$cookie.set(userId:data.userId)而来的
目前我是在app.vue中去全局引用通过websocket.onmessage去监听并改变store中定义的数据,代码如下
[code]import socket from '@/api/socket' //更具你自己的文件去引入之前新建的js //钩子函数去初始化socket created () { let userId = this.$cookie.get('userId')//获取登陆后的userId userId && socket({ userId: userId }) userId && this.bindSocketHandle() // 强制刷新浏览器后重新连接socket并绑定事件 },
bindSocketHandle方法如下
[code] methods: { bindSocketHandle () { this.$socket.onmessage = this.getMessageInfo //之前vue中原型已经注册所以可以直接使用 this.$socket.onclose = this.socketClose //关闭后的方法我就不举例了 this.$socket.onerror = this.socketError //错误时调用的方法我就不举例了 }, getMessageInfo({ data }){ let msg = JSON.parse(data) //后端返回的是json数据,需要转换 switch (msg.uri) { case '11': this.$store.commit('socket/UPDATE_SYSPUSHMSG', msg.data)//也可以试试用vuestore的mapActions break case '222': this.$store.commit('socket/UPDATE_COUNTUNREAD', msg.data) break } }, }
store里面我就不举例子了,最后提醒只要监听store state的数据是否改变(mapState)来进行对应的操作,可以放在computed里面,watch你喜欢也行吧,你喜欢就好.
相关文章推荐
- vue 如何使用websocket
- VUE项目如何使用WebSocket
- 关于如何使用websocket 接收并显示图片或者操作二进制
- 如何使用websocket 主动响应客户端
- vue如何使用 Slot 分发内容实例详解
- 关于如何使用websocket 接收并显示图片或者操作二进制
- 详解如何使用webpack打包Vue工程
- 如何使用vue-cli创建项目
- 详解如何使用webpack在vue项目中写jsx语法
- 如何优雅的使用vue+vux开发app -01
- vue2.0 使用vue-cli搭建的项目如何在index.html里引入静态css和js
- 如何在require中使用VUE
- 如何优雅地使用 VSCode 来编辑 vue 文件?
- 如何在vue项目中使用md5.js及base64.js
- 如何使用Vue中的slot
- vue中如何在v-for中动态的使用将index拼接字符串后绑定id属性
- Vue如何使用vue-area-linkage实现地址三级联动效果 很多时候我们需要使用地址三级联动,即省市区三级联动。网上有很多插件,在此介绍Vue的一款地区联动插件:vue-ar
- 如何优雅的使用vue+vux开发app -02
- 如何优雅的使用vue+vux开发app -03
- 如何优雅地使用 VSCode 来编辑 vue 文件?