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("退出成功") 		}, 	}) },

只是个人简单记录!!!

相关内容

热门资讯

值得注意的是!wepoker游... 值得注意的是!wepoker游戏的安装教程,pokemmo脚本,竟然存在有挂(有挂透视)1、进入到w...
来临!哈糖大菠萝挂法,wejo... 来临!哈糖大菠萝挂法,wejoker手机版透视脚本,竟然真的是有挂(有挂总结)1、全新机制【wejo...
明白辅助挂!hhpoker透视... 明白辅助挂!hhpoker透视脚本下载,哈糖大菠萝挂,都是是真的有挂(有挂秘笈)暗藏猫腻,小编详细说...
总结辅助挂!约局吧辅助器,佛手... 总结辅助挂!约局吧辅助器,佛手大菠萝辅助,好像真的有挂(有挂秘诀)1)佛手大菠萝辅助有没有挂:进一步...
此事引发广泛关注!hhpoke... 此事引发广泛关注!hhpoker真的假的,wepoker透视有没有,竟然存在有挂(新版有挂)1、全新...
黑科技辅助挂!wepoker辅... 黑科技辅助挂!wepoker辅助真的假的,扑克之星辅助,果然是真的有挂(有挂规律)进入游戏-大厅左侧...
值得注意的是!aapoker透... 值得注意的是!aapoker透视插件,wepoker私人局开挂视频,真是是有挂(有挂教程)1、每一步...
来临!wpk插件辅助,智星菠萝... 来临!wpk插件辅助,智星菠萝透视,好像确实有挂(真的有挂)1、任何智星菠萝透视透视是真的假的的玩家...
在玩家背景下!佛手在线大菠萝智... 在玩家背景下!佛手在线大菠萝智能辅助器,wepoker辅助软件价格,总是确实有挂(有挂解密)1、佛手...
据玩家消息!有没有人wepok... 据玩家消息!有没有人wepoker,pokerworld软件,切实真的有挂(有挂助手)1、下载好有没...