uniapp:小白1分钟学会使用webSocket(可无脑复制)

本文介绍了如何在uni-app项目中,利用vuex管理WebSocket连接,并通过`uni.connectSocket()`创建WebSocket,同时展示了登录页面获取token并启动连接,以及聊天页面的事件监听和消息处理。
摘要由CSDN通过智能技术生成

uni.connectSocket()
uni.$emit页面通信
项目中使用uni.connectSocket()创建webSocket的总结,代码可无脑复制,直接使用。

1、main.js 引入vuex

import store from './store';
Vue.prototype.$store = store;

vuex中封装webSocket

2、vuex的:index.js

import Vue from 'vue';
import Vuex	from 'vuex';
// 模块
import chat from './modules/chat';
Vue.use(Vuex);
const store = new Vuex.Store({
	modules: {
		chat,
	}
});
export default store;

3、vuex的chat

import Vue from 'vue';
export default {
	namespaced: true,
	state: {
		socketUrl:'wss://api.****.com/wss/default.io', // socke链接
		isclose: false, // 是否已连接
		reconnections: 0, // 连接次数
		heartbeatInterval: null, // 心跳检测
	},
	mutations: {
	},
	actions: {
		// 开始或重启即时通讯,全局监听
		async start({state, dispatch, rootState}){
			// 如果已连接,关闭重新连接
			uni.onSocketOpen(()=> {
				state.isclose = true;
			});
			if (state.isclose) {
				uni.closeSocket();
				uni.onSocketClose((res)=> {
					clearInterval(state.heartbeatInterval)
					state.heartbeatInterval = null
					console.log('已经连接中的Socket关闭成功')
				});
			}
			// 获取token省略,自行请求接口并赋值,这里只是快速演示如何:创建一个 WebSocket 连接
			let token = 'eyJ0****c1Ng'
			if(token){
				let url = `${state.socketUrl}?token=${token}`
				uni.connectSocket({url});
			}else{
				console.log('未获取到token');
			}
			
			// 监听 WebSocket 连接打开事件
			uni.onSocketOpen((res)=> {
				console.log('新创建的Socket连接成功');
			});
			
			// 监听WebSocket错误。
			uni.onSocketError((res)=> {
				state.reconnections += 1;
				if (state.reconnections <= 3) {
					console.log(`连接失败,正在尝试第${state.reconnections}次连接`);
					dispatch('start');
				}else{
					console.error('已尝试3次重新连接均未成功');
				}
			});
			
			// 监听socket接受到服务器的消息事件
			uni.onSocketMessage((res)=> {
				let getData = JSON.parse(res.data)
				if(getData.event == 'connect'){
					// 心跳
					state.heartbeatInterval = setInterval(()=>{
						uni.sendSocketMessage({data: '{"event":"heartbeat"}'});
					},5000)
				}
				
				// 通过uni.$emit触发全局的自定义事件,并在页面中通过uni.$on接收数据
				if(getData.event == 'event_talk'){
					uni.$emit('getMsg',getData.content); // 更新消息内容
					uni.$emit('getList',getData.content); // 更新消息列表
				}
			});
		}
	}
}

4、login:登录页面

// 登录接口,登录成功后,存储token,执行chat/start
this.$http.post('/api/').then(res=>{
	// 存储token
	uni.setStorageSync('token', res.token);
	this.$store.dispatch('chat/start');
})

5、聊天页面

<script>
	export default {
		data() {
			return {

			}
		},
		onUnload() {
			// 卸载监听
			uni.$off('getMsg')
			uni.$off('getList')
		},
		onLoad() {
			// 收到更新消息
			uni.$on('getMsg', data => {
				console.log('收到消息的监听getMsg:',data);
			})
			// 收到更新列表
			uni.$on('getList', data => {
				console.log('收到消息的监听getList:',data);
			})
		},
	}
</script>

在这里插入图片描述

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
uniapp使用WebSocket可以通过以下步骤进行操作: 1. 首先,在你的项目中创建一个websocket.js文件,可以放在utils目录下。在这个文件中,你可以定义一个WebSocket类,用于处理WebSocket的连接和消息传输。 2. 在websocket.js文件中,你可以使用uni.connectSocket接口来创建一个WebSocket连接。这个接口返回一个SocketTask对象,你可以使用这个对象来发送和接收消息。 3. 在你的页面中,引入websocket.js文件,并创建一个WebSocket实例。你可以将这个实例挂载到全局的Vue.prototype.$socket上,以便在其他页面中也可以使用。 4. 在页面中,你可以使用this.$socket.send方法来发送消息,传入一个字符串参数作为要发送的内容。 5. 同样地,你可以使用this.$socket.getMessage方法来接收消息。这个方法接受一个回调函数作为参数,当接收到消息时,回调函数会被调用,并传入接收到的消息作为参数。 需要注意的是,在测试环境中,WebSocket的URL可以写成ws://xxx:3100/connect/websocket,而在发布体验版或正式版中,URL应该写成wss://xxx:3100/connect/websocket,以确保安全连接。 总结起来,使用uniappWebSocket可以通过创建WebSocket类、调用uni.connectSocket接口来创建连接、发送和接收消息来实现。具体的代码示例可以参考引用\[1\]中的示例代码。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [uni-app使用websocket(封装、心跳检测、实时信息)](https://blog.csdn.net/m0_60289222/article/details/130315532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [uniapp APPWebSocket 使用,实现一个简单 WebSocket 工具类](https://blog.csdn.net/sinat_35272898/article/details/122511603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值