uniapp使用websocket通信

简要记录uni-app中使用websocket进行通信

1. 初始化

定义全局变量webSocketTask: {}

onLoad()中使用uni.connectSocket建立websocket长链接

this.webSocketTask = uni.connectSocket({
				url: common.wsUrl() + ':8082/websocket/' + this.userId,
				success: () => {
					console.info("-------connectSocket success--------")
				},
				fail: () => {
					console.info("-------connectSocket fail--------")
				},
				complete: () => {
					console.info("-------connectSocket complete--------")
				}
			});

监听WebSocket连接打开事件

this.webSocketTask.onOpen((res) => {
				console.info("----webSocketTask---websocketOpen--------")
			});

监听WebSocket错误

	uni.onSocketError((res) => {
				console.info("-------websocketerror--------" + res)
			});

接收websocket消息及处理

			this.webSocketTask.onMessage((res) => {
				let wsData = JSON.parse(res.data);
				console.info("------接收webSocketTask消息--------" + res.data)
			});

2. 发送websocket消息

自定义json对象作为传递参数,接收时对应解析

		const wsData = {
				    content: '',
				   	type: '0'
			     }
		this.webSocketTask.send({
			data: JSON.stringify(wsData)
		});

3. 关闭websocket

记得在需要时或离开页面时onUnload()关闭websocket


			uni.closeSocket({
				success: () => {
					console.info("-------close websocket success--------")
				},
				fail: () => {
					console.info("-------close websocket fail--------")
				},
			})

 

uniApp中,WebSocket是一种全双工通信协议,它能够实现实的数据交换,因此非常适合在客户端和服务端之间传输大量实信息,包括图像文件。在uniApp中利用WebSocket技术发送和接收图片,需要同考虑uniApp提供的原生能力以及一些跨域限制。以下是基本流程和步骤说明: ### 发送图片至服务端 #### 步骤一:初始化WebSocket连接 首先,需要创建一个WebSocket实例,并尝试建立与服务端的连接。在uni-app中,你可以通过调用微信提供的API来实现WebSocket的创建与连接。 ```javascript // 创建WebSocket实例 const socket = new WebSocket(`ws://${location.host}/websocket`); // 连接成功的回调 socket.onopen = function(event) { console.log('连接成功'); }; // 连接关闭的回调 socket.onclose = function(event) { console.log('连接已关闭'); }; // 接收到数据的回调 socket.onmessage = function(event) { console.log('接收到的数据:', event.data); }; // 发送数据触发 socket.send('请求数据'); ``` #### 步骤二:编码图片数据为Base64格式 由于WebSocket默认传输的是文本数据,因此我们需要将图片数据编码为Base64字符串后再进行传输。在uni-app中,可以通过本地方法获取图片文件,然后使用微信提供的文件管理API将其转换为Base64编码。 ```javascript const readFileAsDataURL = async (filePath) => { return new Promise((resolve, reject) => { wx.getFileSystemManager().readFile({ filePath, encoding: 'base64', success: (res) => resolve(res.data), fail: () => reject(new Error('无法读取文件')), }); }); }; // 示例:假设filePath是你想要编码的图片路径 readFileAsDataURL('/path/to/image.jpg') .then((dataURL) => { socket.send(dataURL); // 发送Base64编码的图片数据 }) .catch((error) => { console.error('Error reading or sending the image:', error); }); ``` ### 接收图片至客户端 服务端在接收到图片数据后,会按照相同的流程解码Base64字符串回原图格式,并返回给客户端。客户端接收到图片数据后,需要将其还原为原图格式。 ### 注意事项 1. **安全性**: 确保所有敏感信息加密传输,特别是涉及身份验证的部分。 2. **性能**: WebSocket虽然高效,但在某些网络环境下仍可能存在延迟或断开的问题。合理设计应用程序逻辑,避免因频繁或大量数据传输导致的性能问题。 3. **兼容性**: 确保WebSocket支持的范围,尤其是考虑到移动设备的限制及网络环境多样性。 ### 实际应用示例 实际开发中,你可能会遇到更多细节,如设置心跳机制保持连接活跃、错误处理、以及更复杂的业务逻辑交互。重要的是理解WebSocket的工作原理及其在实通信场景下的优势。 ### 相关问题: 1. **WebSocket如何解决跨域问题?** 2. **如何在uniApp中配置WebSocket以适应不同平台特性?** 3. **如何利用WebSocket进行实音视频通话?**
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值