vue项目使用socket.io-client

vue项目使用socket.io-client客户端

安装socket.io-client模块
npm install socket.io-client --save

新建一个js文件,配置socket:

import Vue from 'vue';
import io from 'socket.io-client';		//引入socket.io-client

export default new Vue({
	data: {
		hasRealAlarm: false,
		socket: null,
		nInstance: null,
	},
	methods: {
		switchRealAlarm(is) {
			this.hasRealAlarm = is;
		},
		initSocket() {
			const _this = this;
			const socket = io('http://192.168.1.242:8360/');		//路径
			this.socket = socket;
			// console.log('初始化:socket', socket);
			this.socket.on('connect', (data) => {
				console.log('open:', data);
				const userName = {
					userName: this.getuserName(),		//获取登录缓存的用户
				};
				console.log('userName:', userName);
				if (this.getuserName() !== null) {
					socket.emit('addUser', userName);		//推送用户账号给后端socket
				}
			});

			this.socket.on('close', () => {
				console.log('socket连接关闭');
			});

			/* Listeners */
			this.socket.on('alarmToWeb', (data) => {		
				// console.log('后端推送的实时告警信息', data);
				console.log('alarmToWeb:socket', data);
				_this.$emit('newAlarms', data);			//触发当前实例上的事件。data传给监听器回调。
				this.newAlarmsArrive(data);
			});

			this.socket.on('AccessResponseToWeb', (data) => {
				console.log('AccessResponseToWeb:socket', data);
				_this.$emit('AccessResponseToWeb', data);
				this.newDoorArrive(data);
				// this.newAlarmsArrive(data);
				// _this.$on('newAlarms', (data2) => {
				// 	// console.log('alarmToWeb88:socket', data2);
				// 	// console.log('neAlarms告警信息: ', data2);
				// });
				// console.log('实时告警信息到达', data);
			});

			// 试用期使用时长
			this.socket.on('lisenceEndToWeb', (data) => {
				console.log('试用期数据', data);
				this.$notify({
					title: '提示',
					message: `授权码结束时间为:${data.endDate},剩余天数:${data.remainingDays}`,
					type: 'warning',
					position: 'bottom-right',
				});
			});

			this.socket.on('freshDataToWeb', (data) => {
				// console.log('设备收到的新数据', data);
				// alert(data);
			});

			_this.$on('close', () => {
				console.log('socket-close');
				this.socket.close();
			});
			/* Listeners */
		},

		newAlarmsArrive(data) {
			const _this = this;
			console.log('index-发生告警8:', data);
			//  confirmTitle = '提醒'
			let alarmInfo;
			let alarmType;
			if (data.state === '告警') {
				alarmType = 'error';
				alarmInfo = `${data.areaName}的${data.devName}发生了${data.alarmName},告警级别为:${data.alarmType}`;
			} else {
				alarmType = 'success';
				alarmInfo = `${data.areaName}的${data.devName}的${data.alarmName},告警已解除`;
			}
			// console.log('接收到告警信息数据:', alarmInfo);
			// Notification.closeAll();
			if (this.nInstance !== null) {
				this.nInstance.close();
			}
			this.nInstance = this.$notify({
				title: '提醒',
				type: alarmType,
				dangerouslyUseHTMLString: true,
				message: `<strong>${alarmInfo}</strong>`,
				position: 'bottom-right',
				duration: 0,
				onClick() {
					_this.$router.push('/alarm');
					console.log('点击进入告警页面');
					this.close();
					_this.nInstance = null;
				},
				onClose() {
					console.log('刷新设备数据');
					_this.nInstance = null;
				},
			});
		},
		newDoorArrive(data) {
			const _this = this;
			// console.log('index-发生告警8:', data);
			//  confirmTitle = '提醒'
			let alarmInfo;
			let alarmType;
			if(data.opCode == 6) {
				if(data.errCode == 0) {
					alarmType = 'success';
					alarmInfo = `设置${data.devName}设备成功`;
				} else if(data.errCode == 1) {
					alarmType = 'error';
					alarmInfo = `设置${data.devName}设备出错,提示:不支持的命令请求`;
				} else if(data.errCode == 2) {
					alarmType = 'error';
					alarmInfo = `设置${data.devName}设备出错,提示:参数错误`;
				} else if(data.errCode == 3) {
					alarmType = 'error';
					alarmInfo = `设置${data.devName}设备出错,提示:重复操作`;
				} else if(data.errCode == 4) {
					alarmType = 'error';
					alarmInfo = `设置${data.devName}设备出错,提示:资源忙或不足`;
				} else if(data.errCode == 5) {
					alarmType = 'error';
					alarmInfo = `设置${data.devName}设备出错,提示:通讯超时`;
				}
			} else if(data.opCode == 8) {
				if(data.errCode == 0) {
					alarmType = 'success';
					alarmInfo = `添加${data.devName}权限成功`;
				} else if(data.errCode == 1) {
					alarmType = 'error';
					alarmInfo = `添加${data.devName}权限出错,提示:不支持的命令请求`;
				} else if(data.errCode == 2) {
					alarmType = 'error';
					alarmInfo = `添加${data.devName}权限出错,提示:参数错误`;
				} else if(data.errCode == 3) {
					alarmType = 'error';
					alarmInfo = `添加${data.devName}权限出错,提示:重复操作`;
				} else if(data.errCode == 4) {
					alarmType = 'error';
					alarmInfo = `添加${data.devName}权限出错,提示:资源忙或不足`;
				} else if(data.errCode == 5) {
					alarmType = 'error';
					alarmInfo = `添加${data.devName}权限出错,提示:通讯超时`;
				}
			} else if(data.opCode == 9) {
				if(data.errCode == 0) {
					alarmType = 'success';
					alarmInfo = `删除${data.devName}权限成功`;
					this.$message({
						message: '删除成功',
						type: 'success',
					});
				} else if(data.errCode == 1) {
					alarmType = 'error';
					alarmInfo = `删除${data.devName}权限出错,提示:不支持的命令请求`;
				} else if(data.errCode == 2) {
					alarmType = 'error';
					alarmInfo = `删除${data.devName}权限出错,提示:参数错误`;
				} else if(data.errCode == 3) {
					alarmType = 'error';
					alarmInfo = `删除${data.devName}权限出错,提示:重复操作`;
				} else if(data.errCode == 4) {
					alarmType = 'error';
					alarmInfo = `删除${data.devName}权限出错,提示:资源忙或不足`;
				} else if(data.errCode == 5) {
					alarmType = 'error';
					alarmInfo = `删除${data.devName}权限出错,提示:通讯超时`;
				}
			}
			
			// console.log('接收到告警信息数据:', alarmInfo);
			// Notification.closeAll();
			if (this.nInstance !== null) {
				this.nInstance.close();
			}
			this.nInstance = this.$notify({
				title: '提醒',
				type: alarmType,
				dangerouslyUseHTMLString: true,
				message: `<strong>${alarmInfo}</strong>`,
				position: 'bottom-right',
				duration: 0,
				onClose() {
					console.log('刷新设备数据');
					_this.nInstance = null;
				},
			});
		}
	},
});

vue文件如何获取js文件接收到的后端推送过来的数据:

<script>
import EventBus from '../utils/Eventbus';
export default {
	data() {
		return {}
	}
	created() {
		EventBus.$on('newAlarms', (data) => {		//使用vue监听事件
				console.log('newAlarms',data)
		});
	},
}
</script>
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3是一种流行的JavaScript框架,而Pinia是一个基于Vue 3的状态管理库。Socket.io-client是一个用于在浏览器和服务器之间建立实时双向通信的JavaScript库。下面是关于如何在Vue 3中使用Pinia和socket.io-client的介绍: 1. 首先,确保你已经安装了Vue 3和Pinia。你可以使用npm或yarn来安装它们: ``` npm install vue@next pinia ``` 2. 接下来,安装socket.io-client: ``` npm install socket.io-client ``` 3. 在你的Vue 3应用程序的入口文件(通常是main.js或app.js),导入Vue、Pinia和socket.io-client: ```javascript import { createApp } from 'vue'; import { createPinia } from 'pinia'; import { io } from 'socket.io-client'; ``` 4. 创建Pinia实例并将其与Vue应用程序关联: ```javascript const pinia = createPinia(); const app = createApp(App); app.use(pinia); ``` 5. 创建socket.io-client实例并将其与Pinia关联: ```javascript const socket = io('http://your-server-url'); pinia.use(({ store }) => { store.$socket = socket; }); ``` 6. 现在,你可以在任何组件中使用Pinia状态管理和socket.io-client了。例如,在一个组件中发送和接收消息: ```javascript import { defineComponent, ref } from 'vue'; import { useStore } from 'pinia'; export default defineComponent({ setup() { const store = useStore(); const message = ref(''); const sendMessage = () => { store.$socket.emit('message', message.value); }; store.$socket.on('message', (data) => { console.log('Received message:', data); }); return { message, sendMessage, }; }, }); ``` 以上是在Vue 3中使用Pinia和socket.io-client的基本介绍。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值