uniapp使用uni自带websocket进行即时通讯
创始人
2025-01-16 22:33:31
0

最近再办一个uniapp做的即时通讯,把其中思路记载一下。

技术栈采用uniapp+uview+vue2进行开发。

一、使用uni封装好的websocket。

下面的从uniapp官网截图的Api

 uni.connectSocket() :这个方法可以让我们创建一个webSocket的连接,里面包含几个参数,url是写ws的连接地址,没有的话肯定是连接不上服务器,其他的没用过。用的时候再看。

// 创建webSocket this.webSocketTask = uni.connectSocket({ 	url: '这里面写的是连接地址', 	header: { 	    'content-type': 'application/json' 	}, 	success(res) { 		console.log('成功', res); 	}, })

我们在data中定义一个webSocket:null,然后把websocket对象赋给他,以供下面的方法使用。

 uni.onSocketOpen()是用来监听websocket连接成功的事件,方法里面跟一个回调函数,可以通过res参数拿到响应头。

//监听WebSocket连接打开事件 this.webSocketTask.onOpen((res) => { 	console.info("监听WebSocket连接打开事件", res) });

 这个没用过,过!!!

 通过uni.onSocketMessag()可以接收到服务器返回的消息。

//接收websocket消息及处理 this.webSocketTask.onMessage((res) => { 	let data = JSON.parse(res.data); //判断服务器返回的type类型 	switch (data.type){ 		//如果返回的ping,说明服务端ping客户端 		case 'ping':             //我们要给服务器说一个pong告诉服务器我还活着 			this.webSocketTask.send({ 				data: JSON.stringify({ 					type: 'pong' 				}) 			}); 			break; 		//登录更新用户列表         //如果type是init,说明服务器知道我们活着,给我们传一个标识,我们通过这个标识去请求接口,                                       建立唯一链接。 		case 'init': 			uni.setStorageSync('client_id', data.client_id); 			this.$u.post('common/pub/bindUid',{ 				client_id: data.client_id, 				user_id: this.userId 			}).then(res => { 				this.webSocketTask.send({ 					data: JSON.stringify({ 						type: 'bindUid', 						user_id:2 					}) 				}); 			}); 			break; 		case 'simple': 			this.userList.push(data.data) 			this.scrollToBottom() 			break; 		case 'group': 			this.userList.push(data.data) 			this.scrollToBottom() 			break 	}

这个的话按官方文档说的就是需要卸载uni。onSocketOpen回调里面才行。但是我直接通过实例对象发也可以。

this.webSocketTask.send({ 	data: JSON.stringify({type: 'pong'}) });

注意:websocket只能接收字符串,记得转换类型

这个就是关闭连接,写在onUnload钩子中就行

onUnload(){ 	uni.closeSocket({ 		success:() => { 			console.info("退出成功") 		}, 	}) },

 最后一个就是监听websocket是否关闭。

uniapp官网文档:uni.connectSocket(OBJECT) | uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/api/request/websocket.html

uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/api/request/socket-task.html完整代码:

onLoad(){     this.socket() };   methods:{     socket(){     //创建webSocket     this.webSocketTask = uni.connectSocket({ 	    url: 'ws地址', 		header: { 			'content-type': 'application/json' 		}, 		success(res) { 			console.log('成功', res); 		}, 	})  	// 监听WebSocket连接打开事件 	this.webSocketTask.onOpen((res) => { 		console.info("监听WebSocket连接打开事件", res) 	});  	// 监听WebSocket错误 	uni.onSocketError((res) => { 		console.info("监听WebSocket错误" + res) 	}); }  onShow(){     // 接收websocket消息及处理     this.webSocketTask.onMessage((res) => { 		let data = JSON.parse(res.data); 		switch (data.type) { 			// 服务端ping客户端 			case 'ping': 				this.webSocketTask.send({ 					data: JSON.stringify({ 						type: 'pong' 					}) 				}); 				break; 			// 登录 更新用户列表 			case 'init': 				uni.setStorageSync('client_id', data.client_id); 				this.$u.post('接口', { 					client_id: data.client_id, 					user_id: this.userId 				}).then(res => { 					this.webSocketTask.send({ 						data: JSON.stringify({ 							type: 'bindUid', 							user_id: this.userId 						}) 					}); 				}); 				break; 			case 'simple': 				this.userList.push(data.data) 				this.scrollToBottom() 				break; 			case 'group': 				// this.groupMenuList() 				this.userList.push(data.data) 				this.scrollToBottom() 				break 		}  	}); }  onUnload() { 	uni.closeSocket({ 		success: () => { 			console.info("退出成功") 		}, 	}) },

只是个人简单记录!!!

相关内容

热门资讯

玩家必看分享!财神十三张脚本辅... 玩家必看分享!财神十三张脚本辅助(辅助辅助挂)真是有透视操作1、下载好财神十三张脚本辅助脚本下载之后...
玩家必看科普!花城棋舍辅助(解... 玩家必看科普!花城棋舍辅助(解迷辅助方法)果然有透视讲义1、首先打开花城棋舍辅助辅助器下载最新版本,...
2024教程!凑一桌开挂(解谜... 2024教程!凑一桌开挂(解谜辅助工具)原来有透视妙招1、这是跨平台的凑一桌开挂轻量版有透视,在线的...
我来向大家传授!叮叮川南游戏辅... 我来向大家传授!叮叮川南游戏辅助软件(教你辅助攻略)其实有透视指南一、叮叮川南游戏辅助软件游戏安装教...
一分钟教你!大菠萝免费辅助(必... 一分钟教你!大菠萝免费辅助(必备辅助app)原来有透视手册1、很好的工具软件,可以解锁游戏的大菠萝免...
热点推荐!微信小程序雀神辅助器... 热点推荐!微信小程序雀神辅助器(专业辅助技巧)切实有透视学习1、微信小程序雀神辅助器公共底牌简单,微...
揭秘!雀神麻雀科技公司(详细辅... 揭秘!雀神麻雀科技公司(详细辅助器)总是有透视指南书1、这是跨平台的雀神麻雀科技公司轻量版有透视,在...
1.9分钟了解!吉祥填大坑有插... 1.9分钟了解!吉祥填大坑有插件吗(专业辅助挂)好像有透视指南吉祥填大坑有插件吗能透视中分为三种模型...
最新技巧!丽水欢乐堂辅助插件(... 最新技巧!丽水欢乐堂辅助插件(专业辅助教程)果然有透视法子1、让任何用户在无需丽水欢乐堂辅助插件安装...
玩家必看教程!jj斗地主麻将外... 玩家必看教程!jj斗地主麻将外挂(揭露辅助攻略)本来有透视窍门所有人都在同一条线上,像星星一样排成一...