Vue | uni-app 中使用websocket

WebSocket 封装


首先在根目录下新建一个 store文件夹,并新建一个 websocket.js文件,代码如下:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
	state: {
		socketTask: null,
		eventlist: {},
		unread: []
	},
	mutations: {
		WEBSOCKET_INIT(state, url) {
			// 创建一个this.socketTask对象【发送、接收、关闭socket都由这个对象操作】
			state.socketTask = uni.connectSocket({
				url,
				// 【非常重要】必须确保你的服务器是成功的,如果是手机测试千万别使用ws://127.0.0.1:9099【特别容易犯的错误】
				success(data) {
					console.log("websocket连接成功");
				},
			});
			// 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】
			state.socketTask.onOpen((res) => {
				console.log("WebSocket连接正常打开中...!");
				state.is_open_socket = true;
				// 注:只有连接正常打开中 ,才能正常收到消息
				state.socketTask.onMessage((res) => {
					console.log("收到服务器内容:" , JSON.parse(res.data));
					state.eventlist = JSON.parse(res.data)
					// state.unread.push(JSON.parse(res.data))
				});
			})
		},
		WEBSOCKET_SEND(state, p) {
			console.log("ws发送!");
			state.socketTask.send({
				data: p,
				async success() {
					console.log("消息发送成功");
				},
			});
		},
	},


	actions: {
		WEBSOCKET_INIT({
			commit
		}, url) {
			commit('WEBSOCKET_INIT', url)
		},
		WEBSOCKET_SEND({
			commit
		}, p) {
			commit('WEBSOCKET_SEND', p)
		}
	}
})

然后在main.js里加入:

import store from './store/websocket.js'
Vue.prototype.$store = store
const app = new Vue({
	...App,
	store
})

在要使用的页面:

首先引入,可通过 eventlist 获取到服务端推送过来的数据

import { mapState } from 'vuex';
computed: {
	...mapState(['eventlist'])
}

创建链接

this.$store.dispatch('WEBSOCKET_INIT', 'websocket链接url')

注:(向服务端发送消息)

this.$store.dispatch('WEBSOCKET_SEND', 内容)

最后就大功告成了,工作时遇到了这个问题,就随手封装了一个,欢迎评论区指出不足

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值