Vue|Vue + Vuex + sockjs-client + stompjs进行websocket连接
Vue + Vuex + sockjs-client + stompjs进行websocket连接
前不久遇到一个需求:实时读取硬件数据,在此作为技术点。
之前想的是使用,定时刷新请求接口来获取,但是数据实时性要求较高,这样难免有些麻烦。
这时候,websocket 就是一个不错的选择了。
简单赘述下原理(想直接上手可跳过此部分)
这里只描述大概,具体详细原理可另行百度。
由于WebSocket是html5出的协议,所以老版的浏览器是肯定不会支持的。1.vue的使用方法 执行npm 命令行,如下:
这里用到的Sock.js 就是用来兼容一些旧版本的浏览器。
而,STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。
简单地说,stomp是一个用于client之间进行异步消息传输的简单文本协议
npm install sockjs-client --save2.在vuex中创建
npm install stompjs --save
这里说明一点,也可以不使用vuex,可以直接在组件或者单个项目生命周期使用。
import SockJS from 'sockjs-client';
import Stomp from 'stompjs';
const state = {
tagValueList: {}
}const mutations = {
tagListContent(state, newValue) {
state.tagValueList = newValue
}
}const actions = {
// 创建方法
connect(context) {
//创建连接
let socket = new SockJS('/xxxx/xxxx');
// 这个地址要找你们后端
let stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
stompClient.subscribe('/xxxx/xxxx', function (info) { // 这个地址要找你们后端
let receiveMsg = info.body
context.commit('tagListContent', receiveMsg)
});
});
}
}export default {
namespaced: true,
state,
mutations,
actions
}
这样,我在全局任意都可以直接使用了
3.页面中使用 【Vue|Vue + Vuex + sockjs-client + stompjs进行websocket连接】由于我创建的是全局的实例对象,在watch中可以直接监听它的变化进行下一步操作了
import { stomp } from 'vuex'computed: {
stomp() {
return this.$store.state.stomp.tagValueList
}
},
watch: {
stomp : function(val) {
// val 就是后端传过来的值了
// 逻辑代码
console.log(val)
}
}
就这些,比较简单。
考虑到有些朋友可能不用这么复杂,我还是写一些不用vuex的方法吧!
4.直接在生命周期中使用
import SockJS from 'sockjs-client';
import Stomp from 'stompjs';
created:function(){
let socket = new SockJS('xx/xx');
let stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
stompClient.subscribe('/topic/eqp/register', function (info) {
console.warn(info.body);
console.warn(JSON.parse(info.body));
});
});
}
5.前端自己发送数据 有些时候,为了便于测试,频繁地找后台开发的同学好像有些麻烦(会遭人烦 2333 -.-
所以我这里用的 MQTTX 这客户端软件自己进行测试
还是比较方便的
网上搜索很多的,mac用户在app store下载。
语言可以改为中文。
文章图片
mqttx使用截图 最后的最后,点个赞再走~
推荐阅读
- vue-cli|vue-cli 3.x vue.config.js 配置
- 2020-04-07vue中Axios的封装和API接口的管理
- VueX--VUE核心插件
- vue组件中为何data必须是一个函数()
- 用npm发布一个包的教程并编写一个vue的插件发布
- vuex|vuex 基础结构
- Vue源码分析—响应式原理(二)
- VueX(Vuex|VueX(Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式)
- vue中的条件判断详解v-if|vue中的条件判断详解v-if v-else v-else-if v-show
- 如何在手机上查看测试vue-cli构建的项目