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分钟带你讲解!人海大厅脚本... 人海大厅脚本是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微信(...
第五分钟带你了解!博弈麻友圈辅... >>您好:博弈麻友圈辅助确实是有挂的,很多玩家在这款博弈麻友圈辅助游戏中打牌都会发现很多用户的牌特别...
一分钟带你得知!土豪联盟辅助软... 一分钟带你得知!土豪联盟辅助软件下载(辅助挂)一直真的是有挂(证实有挂)-哔哩哔哩;相信小伙伴都知道...
第2分钟了解!阿当比鸡辅助器,... 第2分钟了解!阿当比鸡辅助器,休闲九九破解版,2026新版(发现有挂)-哔哩哔哩;是一款可以让一直输...
4分钟带你发现!爱玩联盟辅助软... 4分钟带你发现!爱玩联盟辅助软件,科乐填大坑辅助码,靠谱教程(真的有挂)-哔哩哔哩;无需打开直接搜索...
八分钟带你解说!微信小程序多乐... 《八分钟带你解说!微信小程序多乐辅助器下载(辅助挂)其实是有挂的(有挂技巧)-哔哩哔哩》 微信小程序...
十分钟带你了解!德普之星辅助器... 十分钟带你了解!德普之星辅助器(透视挂)玩家必看教程外挂开挂辅助下载(其实是有挂的)>>您好:软件加...
第五分钟掌握!雀神麻雀充运势有... 第五分钟掌握!雀神麻雀充运势有用吗,决战卡五星辅助修改器,攻略方法(有挂存在)-哔哩哔哩;亲,有的,...
五分钟带你透视!哈局13张辅助... 五分钟带你透视!哈局13张辅助器,决战卡五星辅助源码,德州教程(有挂教学)-哔哩哔哩;打开点击测试直...
四分钟带你了解!wepoker... 四分钟带你了解!wepoker插件程序(辅助挂)一贯真的有挂(今日头条)-哔哩哔哩;wepoker插...