uniapp中websocket的使用方法

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

今天研究一下在uniapp中websocket的使用方法:

基本使用:
uni.closeSocket();
关闭现有的websocket服务

uni.connectSocket({
url:“”
});
创建一个新的websocket连接,其中的url是必须传的参数。

uni.onSocketOpen(function (res) {
})
连接成功后的回调函数

uni.onSocketMessage(function (res) {
console.log(‘收到服务器内容:’ + res.data);
})
监听WebSocket接受到服务器的消息事件。

以上为基本用法。

在项目中的实际应用:文章来源地址https://www.toymoban.com/news/detail-532532.html

onShow(){
	//首页显示
	uni.getStorage({
			key: 'UserListYH',
				//获取本地存储中的用户信息
			success: (res)=>{
				//获取成功的回调函数
				this.isLogin = true
				//登陆状态标记为true
				uni.request({
					//根据得到的用户id发送ajax请求,获取用户的消息
					url: this.$api+'/IM/isHaveMessage/' + res.data.id,
					success: (resquert) => {
					//请求成功的回调函数
						console.log(resquert,'resquert')
						if(resquert.data.data){
							this.showxxList = true
							this.$store.state.dataList = true
						}else{
							this.showxxList = false
						}
					}
				});
				//到这里为止还没有用到websocket
				if(!this.socketOpen){
					//判断是否打开了socket服务
					this.uniOpenSocket(res.data.id);
					//如果没有打开服务,就调用开启socket的函数,把用户的id作为参数传进去
				}
			},
			fail:(e)=>{
				//如果存储中获取不到用户信息,登陆状态变成未登录
				this.isLogin = false;
			}
		});
}
uniOpenSocket(id){
			uni.closeSocket();
			//关闭现在的socket
			let _this = this;
			uni.connectSocket({
				url:"ws://uep5ems.nat.ipyingshe.com/imServer/"+id
				//可以判断这个url地址是后端地址,ws:是websocket协议,而且可以发现用户id多次出现
			});
			uni.onSocketOpen(function (res) {
				//连接成功后的回调
				_this.socketOpen = true
				//socket标记为开启状态
				_this.onSocketMessage();
				// 调用了名为onSocketMessage的函数
				uni.getStorage({
				    key: 'userMsgList',
				    success: function (res) {
						console.log('初始化聊天列表成功!');
						console.log(res);
						if(res.data.length == 0){
							_this.chatList=[{
								userId:5,
								userName:"在线客服",
								imageUrl:"/static/img/im/face/face_2.jpg",
								time:"",
								nowMsg:"欢迎提问,很高兴为您服务!",
								numberOfMsg:0,
							}]
						}else{
							console.log(res.data,'*********');
							_this.chatList = res.data
						}
				    },
					fail() {
						_this.chatList=[{
							userId:5,
							userName:"在线客服",
							imageUrl:"/static/img/im/face/face_2.jpg",
							time:"",
							nowMsg:"欢迎提问,很高兴为您服务!",
							numberOfMsg:0,
						}]
					}
				});
			});
//socket连接成功后,调用的回调函数
onSocketMessage(){
			let _this = this;
			let timer = setInterval(()=>{
				//开启一个定时器
				uni.onSocketMessage((msg)=>{
					//接收到服务器的消息
					clearInterval(timer)
					//清空定时器
					if(!msg.data){
						//如果没有消息直接退出当前执行函数
						return
					}
					const msgUser = JSON.parse(msg.data);
					//如果有消息,把消息字符串解析成json对象
					console.log(msgUser)
					let haschatList = false;
					uni.getStorage({
					    key: 'userMsgList',
					    //从本地存储中获取用户的消息列表
					    success: function (res) {
					    	//获取成功的回调
							_this.chatList = res.data
							//获取的消息列表存入data
							console.log(_this.chatList,'chatList----------');
					    },
						fail: () => {
							console.log('getstorage失败了');
						}
					});



					_this.chatList.forEach((item,index) => {
						// 判断函数----判断当前用户是否在列表
						if(item.userId == msgUser.fromUserId){
							haschatList = true;
							_this.chatList[index].time = msgUser.sendTime
							_this.chatList[index].numberOfMsg++
							_this.chatList[index].nowMsg = msgUser.contentText
							_this.chatList[index].UserAndMeMsgList.push({
								userMsgID: msgUser.fromUserId,
								time: msgUser.sendTime,
								msg: msgUser.contentText
							})
							uni.setStorage({
							    key: 'userMsgList',
							    data: _this.chatList,
								success: function () {
									uni.$emit('haveNewMsg',
									{
										userMsgID: msgUser.fromUserId,
										time: msgUser.sendTime,
										msg: msgUser.contentText
									})
								}
							});
						}
					})
					if(haschatList && _this.chatList.length != 1){
						return
					}
					uni.request({
						url: _this.$api + '/userInfo/getUserInfo?userId='+msgUser.fromUserId,
						method:'POST',
						success: (res) => {
							console.log(res.data.data)
							let msgLsit = {
								userId: msgUser.fromUserId,
								imageUrl: res.data.data.avatar,
								userName: res.data.data.name,
								time: msgUser.sendTime,
								nowMsg: msgUser.contentText,
								numberOfMsg: 1,
								UserAndMeMsgList:[]
							}
							msgLsit.UserAndMeMsgList.push({
								userMsgID: msgUser.fromUserId,
								time: msgUser.sendTime,
								msg: msgUser.contentText
							})
							_this.chatList.unshift(msgLsit)
							uni.setStorage({
							    key: 'userMsgList',
							    data: _this.chatList,
								success: function () {
									uni.$emit('haveNewMsg')
								}
							});
						},
					});
				})
			},60)

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

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

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

相关文章

  • 【Uni-App】uniapp使用uview实现弹出键盘输入密码/验证码功能

    组件使用的是uview组件,Keyboard 键盘和MessageInput 验证码输入两个组件配合使用。 通过mode参数定义键盘的类型,v-model绑定一个值为布尔值的变量,我绑定的是showKeyboard变量,控制键盘的弹出与收起; mode = number (默认值)为数字键盘,此时顶部工具条中间的提示文字为\\\"数字键盘

    2023年04月16日
    浏览(65)
  • 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日
    浏览(33)
  • uni-app的优缺点;uniapp进行条件编译的两种方法;小程序端和H5的代表值

    目录 uni-app的优缺点 优点: 1.跨平台开发: 2.统一的开发语言: 3.高效的性能: 4.丰富的生态圈: 缺点: 1.平台差异性: 2.性能限制: 3.对新特性支持滞后: Uni-app条件编译 process.env.UNI_PLATFORM 变量: 使用 process.env.NODE_ENV 变量: Uni-app中的代表值 Uni-app 是一个跨平台的开发框架

    2024年02月08日
    浏览(122)
  • uni-app + SpringBoot +stomp 支持websocket 打包app

    websocket 协议是在http 协议的基础上的升级,通过一次http 请求建立长连接,转而变为TCP 的全双工通信;而http 协议是一问一答的请求方式方式。 websocket-uni.js

    2024年02月11日
    浏览(49)
  • uni-app 封装 websocket 并且监听心跳机制

    新建 socket.js , 将以下代码复制进去 ,向外暴露。 在入口文件中 将 socketIO 挂载在 Vue 原型上 , 也可以按需引入置顶页面 。 在需要用到webSocket的页面中使用如下方法(可根据自身业务需求进行整改) 离开页面,记得断开连接。

    2024年02月11日
    浏览(43)
  • miniprogram-to-uniapp使用指南(各种小程序项目转换为uni-app项目)

    小程序分类:uni-app qq小程序 支付宝小程序 百度小程序 钉钉小程序 微信小程序 小程序转成uni_app 小程序转为uni_app 小程序转uni_app 小程序转换 工具现在支持npm全局库、HBuilderX插件两种方式使用,任君选择,HBuilderX插件地址:https://ext.dcloud.net.cn/plugin?id=2656 【miniprogram-to-uniapp】

    2024年02月08日
    浏览(53)
  • 『UniApp』uni-app-打包成App

    大家好,我是 BNTang, 在上一节文章中,我给大家详细的介绍了如何将我开发好的项目打包为微信小程序并且发布到微信小程序商店 趁热打铁,在来一篇文章,给大家详细的介绍如何将项目打包成APP。 打包 App 也是一样的,首先需要配置关于 App 应用的基础信息,打开 manifest

    2024年02月04日
    浏览(98)
  • 【UniApp】-uni-app-网络请求

    经过上个章节的介绍,大家可以了解到 uni-app-pinia存储数据的基本使用方法 那本章节来给大家介绍一下 uni-app-网络请求 的基本使用方法 首先我们打开官方文档,我先带着大家看一下官方文档的介绍:https://uniapp.dcloud.net.cn/api/request/request.html 从官方文档中我们可以看到,可以

    2024年02月04日
    浏览(50)
  • [uniapp] 跨页面传值 uni.$emit 和 uni.$on 的使用方法 以及遇到的坑

    uni.$emit 和 uni.$on 是uniapp自带的跨页面传值    vue 父子通讯可以用 props  this.$emit   这种简单的父子通讯紧适用于 页面和组件 或者 组件之间的传值,他并不适用于页面和页面的互相传值 那要实现页面通讯呢,我们一起来看看uni.$emit 和 uni.$on的使用方法 示例:         A页面

    2024年02月02日
    浏览(41)
  • 【UniApp】-uni-app-打包成网页

    经过上一篇文章的介绍,已经将这个计算器的计算功能实现了,接下来就是我们项目当中的一个发包上线阶段,我模拟一下,目的就是为了给大家介绍一下,uni-app是如何打包成网页的。 除了可以打包成网页,uni-app还可以打包成小程序、App、H5、快应用等等,后面在单独开文

    2024年02月04日
    浏览(67)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包