前言:我是在vue+ts环境中写的
// 引入 import SockJS from 'sockjs-client' import Stomp from 'stompjs'
// 进入主页时执行连接,浏览器有打印说明连接成功,接下来待后端发消息就存储到store,最后渲染即可 let stomp = null const url = 'http://10.14.2.66:18000/ws' const socket = new SockJS(url, null, { timeout: 30000 }) stomp = Stomp.over(socket) const _this = this //连接 stomp.connect({ userId: 1 }, function() { stomp.subscribe('/user/topic/todo', function(res) {
// 存储store _this.$store.commit('setMsgContent', res.body) }) stomp.subscribe('/user/topic/loginout', function() {}) })
// 在需要渲染组件中监听是否有发消息,若发了则在组件中显示出来
computed: { logMsg() { return this.$store.getters.getMsgContent } }, watch: { logMsg(val) {
// 拿到store中存储的消息 this.logList = this.logList && this.logList.concat(JSON.parse(val)) localStorage.setItem('logList', JSON.stringify(this.logList)) this.logKey += 1 if (JSON.parse(val).ifFinish) { this.showLoading = false } } },
更详细的demo源码见:https://gitee.com/zh888/sock-demo