uni-app中WebSocket的使用

放在 methods 里面

// 具体流程
			// 判断是否已连接
			initScokets() {
				let that = this;
				// const token =""
				const token = wx.getStorageSync('token')
				uni.connectSocket({
				// 测试地址 根据自身填写
					url: `ws://101.35.21.148?token=${token}`,
					success(res) {
						that.open(); //1、判断是否打开连接
						that.scoketMessage(); //2、判断websocket服务器是否返回信息
						that.TimeOut(); //3、websocket超时操作
					},
					fail(err) {
						console.log("WebSocket连接失败 connectSocket=", err);
						that.error();
					},
				});
				// 监听关闭scoket
					uni.onSocketClose(function(res) {
						console.log('WebSocket 已关闭!669');
					});
			},
			//连接成功
			open() {
				let that = this;
				uni.onSocketOpen((res) => {
					console.log("WebSocket连接成功....");
					that.reset(); //连接成功之后做两秒的一次连接(心跳机制)
				});
			},
			//监听服务器返回信息
			scoketMessage() {
				let that = this;
				uni.onSocketMessage(function(res) {
					//获取服务器返回内容,并获取当前时间戳以作服务器超时判断
					console.log("收到服务器内容:" + res.data);
					console.log('我是测试号',JSON.parse(res.data).data.msg);
					that.serveTime = new Date().getTime();
					// console.log(that.serveTime);
					//以下可以写服务器返回之后具体操作

				});
			},
			//超时响应
			TimeOut() {
				let that = this;
				setInterval(function() {
					let times = new Date().getTime();
					if (times - that.serveTime > 2000) {
						//以下做超时后的操作
					}
				}, 500);
			},
			// 连接失败
			error() {
				let that = this;
				console.log(333);
				uni.onSocketError(function(res) {
					console.log("WebSocket连接打开失败,请检查!");
					that.initScokets(); //连接失败之后,重新向服务器发起连接
				});
			},
			// 心跳响应
			reset() {

				let that = this;
				clearInterval(that.timeoutObj);
				that.timeoutObj = setInterval(function() {
					//做一个判断:在没有获取某个值货值其他需求下,做个无响应的websocket连接。否则就                 做一个有响应的连接
					uni.sendSocketMessage({
						data: `PING`, //data值根据实际需求赋值
						success: (res) => {
							// console.log("正在发送....");
							console.log('心跳维持');
						},
						fail: (err) => {
							console.log("心跳维持失败,重新连接....");
							that.initScokets();
						},
					});
				


				}, this.timeout);
			},
			//发送信息
			startSend() {
				let that = this
				let params={
					project_association_id:3,
					data:{
						msg:'你好(我是测试数据)'
					}
				}
				uni.sendSocketMessage({
					data: JSON.stringify(params), //data值根据实际需求赋值
					success: (res) => {
						console.log('发送');
						// that.scoketMessage()
						// console.log("WebSocket连接中....");
					},
					fail: (err) => {
						console.log("发送失败,重新连接....");
					},
				});
			},

关闭 Socke

onUnload() {
			console.log('隐藏')
			clearInterval(this.timeoutObj);
			// 结束 Socket
			uni.closeSocket();
		},

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值