uniApp使用websocket(自己简单的封装)

         首先自己进行了简单的封装,但是服务器一断开就会断掉,下面再加上心跳重连

data() {
	return {
        websock: null
    };
},
methods: {
    initWebSocket() {
		const url = 'ws://127.0.0.1:8080/home';
		this.websock = uni.connectSocket({
			url: url,
			complete: ()=> {} // 由于uni封装,必须加个回调才会返回一个SocketTask对象
		});
		this.websock.onOpen(this.websocketonopen)
		this.websock.onMessage(this.websocketonmessage)
		this.websock.onClose(this.websocketclose)
		this.websock.onError(this.websocketonerror)
    },
    websocketonopen() { // 连接建立之后执行send方法发送数据,连接成功
		const data = {
			token: this.userInfo.access_token
		};
		if (data.token) {
			const result = JSON.stringify(data);
		    this.websock.send({
				data: result
			})
		} else {
			this.websock.close()
		}
	},
	websocketonmessage (e) { // 数据接收
		const num = Number(JSON.parse(e.data).data);
		plus.runtime.setBadgeNumber(num); // 设置角标
	},
	websocketclose (e) {  // 关闭
	    console.log('已关闭连接')
    },
	websocketonerror () {
		console.log( 'WebSocket连接失败')
	}
}

        注意:uni在封装websocket的时候,有很多api都会与浏览器中带的websocket对象不同,官方地址:(uni-app官网);包括在send的时候,需要组装成一个对象,将需要传递的值放在data字段里面。

下面进行优化,加上心跳重连:

data() {
	return {
        websock: null,
        lockReconnect: false
    };
},
methods: {
    initWebSocket() {
		const url = 'ws://127.0.0.1:8080/home';
		this.websock = uni.connectSocket({
			url: url,
			complete: ()=> {} // 由于uni封装,必须加个回调才会返回一个SocketTask对象
		});
		this.websock.onOpen(this.websocketonopen)
		this.websock.onMessage(this.websocketonmessage)
		this.websock.onClose(this.websocketclose)
		this.websock.onError(this.websocketonerror)
    },
    websocketonopen() { // 连接建立之后执行send方法发送数据,连接成功
		const data = {
			token: this.userInfo.access_token
		};
		if (data.token) {
			const result = JSON.stringify(data);
		    this.websock.send({
				data: result
			})
		} else {
			this.websock.close()
		}
	},
	websocketonmessage (e) { // 数据接收
		const num = Number(JSON.parse(e.data).data);
		plus.runtime.setBadgeNumber(num); // 设置角标
	},
	websocketclose (e) {  // 关闭
	    if (state.userInfo) { // 用户登录还存在时再进行重连
			console.log('断开了重连');
			this.reconnect()
		}
    },
	websocketonerror () {
		if (state.userInfo) { // 用户登录还存在时再进行重连
			console.log('断开了重连');
			this.reconnect()
		}
	},
    reconnect() {
        if(this.lockReconnect) return;
		this.lockReconnect = true;
	    //没连接上会一直重连,设置延迟避免请求过多
        setTimeout(function () { 
			this.initWebSocket();
			console.log('重连中');
			this.lockReconnect = false;
		}, 5000); //这里设置重连间隔(ms)
    }
}

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用uniapp实现websocket简单案例: 1. 在`pages`目录下创建一个`websocket`目录,包括`websocket.vue`文件和`websocket.js`文件。 2. `websocket.vue`文件: ``` <template> <view class="content"> <view class="message">{{ message }}</view> <button class="btn" @tap="sendMessage">发送消息</button> </view> </template> <script> import { connect } from './websocket.js' export default { data() { return { message: '' } }, onLoad() { connect((data) => { this.message = data }) }, methods: { sendMessage() { connect.send('hello world') } } } </script> <style> .content { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh; } .message { font-size: 24px; margin-bottom: 20px; } .btn { background-color: #007aff; color: #fff; padding: 10px 20px; border-radius: 10px; } </style> ``` `websocket.vue`中包含一个`message`变量和一个发送消息的按钮。在页面加载时,调用`connect`函数连接websocket,并指定回调函数。回调函数用于接收websocket返回的消息并更新`message`变量。当用户点击发送消息的按钮时,调用`connect.send`函数向websocket发送消息。 3. `websocket.js`文件: ``` const url = 'ws://localhost:3000' let socket = null function connect(callback) { socket = new WebSocket(url) socket.onopen = function() { console.log('websocket连接成功') } socket.onmessage = function(event) { callback(event.data) } socket.onclose = function() { console.log('websocket连接已关闭') } socket.onerror = function(event) { console.error('websocket连接出错', event) } } function send(message) { socket.send(message) } export { connect, send } ``` `websocket.js`中定义了`connect`函数和`send`函数。`connect`函数用于连接websocket,并指定websocket的回调函数。`send`函数用于向websocket发送消息。 4. 启动websocket服务器。可以使用Node.js的`ws`库创建一个简单websocket服务器: ``` const WebSocket = require('ws') const server = new WebSocket.Server({ port: 3000 }) server.on('connection', (socket) => { console.log('websocket连接成功') socket.on('message', (message) => { console.log('接收到消息:', message) socket.send(`服务器收到消息:${message}`) }) socket.on('close', () => { console.log('websocket连接已关闭') }) socket.on('error', (error) => { console.error('websocket连接出错:', error) }) }) ``` 5. 在微信开发者工具中运行uniapp应用,即可通过websocket发送和接收消息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值