【uniapp】uniapp中使用websocket

这篇具有很好参考价值的文章主要介绍了【uniapp】uniapp中使用websocket。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于在uniapp中使用websocket有两种写法,一种是websocket,另一种是socketTask

在这里附上官网链接,官网对与socket的使用写的还是很详细的

websocket:https://uniapp.dcloud.net.cn/api/request/websocket.html

socketTask:uni-app官网

那么面对两种方式我们选择哪一种呢?

我个人的理解是:

如果你是在单页面使用且只有一个socket链接,那么使用websocket这种形式就可以

如果你在多页面有socket操作或者有多个socket链接,那么建议使用socketTask形式,这样不容易出错。

我自己使用的时候选择的是socketTask形式,附上代码:

//连接websocket
connectSocket() {
				let that = this;
				console.log('调用连接websocket')
				this.socketTask = uni.connectSocket({
						url: 'wss://x x x',
						success(res) {
							console.log("websocket连接成功");
							// that.isSuccess = true
						},
						fail(err) {
							console.log("报错", err);
						}
					},


				);
				this.socketTask.onOpen(function(res) {
					console.log('WebSocket连接已打开!');
					that.isSuccess = true
					that.getStatus()
					that.heart()
				})
				this.socketTask.onMessage(function(res) {
					console.log('收到服务器内容:' + res.data);
					that.handlerMsg(JSON.parse(res.data)) //这里是对获取到的数据进行操作
				});


				this.socketTask.onError(function(res) {
					console.log('WebSocket连接打开失败,请检查!');
					console.log(res);
					// this.isSuccess = false
					// that.connectSocket()

					//进入重新连接
					that.reconnect();

				})
				// // 监听连接关闭 -
				this.socketTask.onClose((e) => {
					console.log('WebSocket连接关闭!');
					clearInterval(that.timer)
					that.timer = ''
					if (!that.isClose) {
						that.reconnect()
					}
				})
				console.log(this.socketTask)
			},
//进入重新连接
			reconnect() {
				console.log('进入断线重连');
				// this.socketTask.close();
				this.socketTask = null;
				this.connectSocket()

			},
//发送消息
	sendSocketMessage(msg) {
				console.log('发送信息')
				console.log(msg)
				return new Promise((reslove, reject) => {
					this.socketTask.send({
						data: msg,
						success(res) {
							console.log('发送成功')
							reslove(res)
						},
						fail(res) {
							console.log('发送失败')
							console.log(res)
							reject(res)
						}
					});
				})

			},
			
//心跳
			heart() {
				let that = this;
				clearInterval(this.timer);
				this.timer = '';
				let msg = {
					"type": "heartbeat",
				}
				this.timer = setInterval(() => {
					 that.sendSocketMessage(JSON.stringify(msg)).then(res => {
						console.log('心跳成功')
					}).catch(res => {
						console.log('发送失败')
					console.log((res))
					 })

				}, 200000)
			},	

有这么几个注意点,

1 - 心跳时间的限制前后端商量好一个时间,心跳的存在是为了保证websocket一直处于一个链接状态,所以如果关闭socket以后记得清除心跳,不要造成内存泄露和浪费

2 - 重连这里可以设置一个标识表明什么情况下需要重新链接,什么情况下关闭链接,灵活使用文章来源地址https://www.toymoban.com/news/detail-507870.html

到了这里,关于【uniapp】uniapp中使用websocket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp中websocket的使用方法

    基本使用: uni.closeSocket(); 关闭现有的websocket服务 uni.connectSocket({ url:“” }); 创建一个新的websocket连接,其中的url是必须传的参数。 uni.onSocketOpen(function (res) { }) 连接成功后的回调函数 uni.onSocketMessage(function (res) { console.log(‘收到服务器内容:’ + res.data); }) 监听WebSocket接受到服

    2024年02月12日
    浏览(29)
  • uniapp 使用websocket 如何实时接受数据?

    使用websocket 如何实时接受数据?​ 什么是websocket​ 是一种支持浏览器与服务器之间实时双向通信的协议。它允许客户端与服务器建立持久的连接,通过这个连接双方可以实时地传输数据。WebSocket 的出现解决了传统的 HTTP 协议只能由客户端向服务器发送请求,而服务器无法主

    2024年02月04日
    浏览(38)
  • uniapp中websocket的使用单个长连接

    2024年02月07日
    浏览(28)
  • uniapp使用uni自带websocket进行即时通讯

    最近再办一个uniapp做的即时通讯,把其中思路记载一下。 技术栈采用uniapp+uview+vue2进行开发。 下面的从uniapp官网截图的Api  uni.connectSocket() :这个方法可以让我们创建一个webSocket的连接,里面包含几个参数,url是写ws的连接地址,没有的话肯定是连接不上服务器,其他的没用

    2024年02月01日
    浏览(31)
  • uniapp使用WebSocket断线,心跳重连机制

    提示:我们在使用WebSocket,经常会遇到有的时候给别人发消息,别人会接收不到,这个时候就有可能是WebSocket断线了,所以这个时候心跳包就出现了 提示:可直接使用,记得把对应地址替换一下

    2024年04月12日
    浏览(30)
  • uniapp使用HQChart的k线,用webSocket更新数据

    项目:不借用HQChart的各种接口数据,即数据后端返回,但是数据格式要和原数据格式一样。

    2024年02月16日
    浏览(19)
  • 关于uniapp中使用opencv.js拍照提取纸张轮廓

    1.效果图片 2.下载opencv.js   比如下载 4.5.0 版本的 opencv.js 文件 https://docs.opencv.org/4.5.0/opencv.js 3.引入 opencv.js放在static文件夹下 页面中引入 let cv = require(\\\'../../static/opencv/opencv.js\\\'); 4.进入正题    //页面先放一个隐藏图片     img id=\\\"imageUrl\\\" alt=\\\"No Image\\\" style=\\\"display: none;\\\" /    //获取

    2024年02月04日
    浏览(28)
  • 关于uniapp使用srcoll-view视图是横向及纵向滚动

            今天在用HBuilder X写uniapp项目时遇到了需要使用滚动视图的地方,为了简单省事自然就选择了srcoll-view这个标签。在写完后实验了一下,微信小程序时没有问题,但是h5页面却出问题了。         问题大致分为两类:横向、纵向         共有的问题有:给scroll-view加上

    2024年02月16日
    浏览(41)
  • uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强制在线用户更新

    实现登录即更新,或实时监听更新 本文介绍的是在 App打开启动 的时候调用更新,点击下方链接,查看使用 WebSocket 实现 实时 通知 在线用户 更新。 uniapp:全局消息是推送,实现app在线更新,WebSocket,apk上传: 背景 :内部手持机app开发功能,需要更新的到车间各个手持机上。

    2024年02月03日
    浏览(31)
  • 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写的参考笔记

    2023/8/29 19:21:11 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写 2023/8/29 19:22:25 在服务器端使用Django WebSocket和客户端使用Uniapp的情况下,以下是代码示例来实现服务器端和客户端之间的群组互发消息。 服务器端代码 (使用Django Chann

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包