什么是WebSocket?WebSocket在Vue中如何使用?

什么是WebSocket?WebSocket在Vue中如何使用?

什么是Websocket?

  通俗说, WebSocket是一种数据通信协议,用于客户端和服务端数据通信。类似于http协议,但http协议通信只能由客户端发起,就比如我们客户端向服务器发送请求,服务器只会返回给我们查询的结果,不能做到服务器主动向客户端推送消息。

  我们想要双向对话,且服务器有连续的状态变化,我们可以使用"轮询"的方法:每隔一段时间,就发送一个请求,服务器返回给我们最新的状态。但是这样会非常浪费资源(需要不停的连接服务器,或者HTTP始终打开着),效率就非常低了。

  所以最有效的解决方法就是使用WebSocket:服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向对话。

Vue中使用WebSocket

  • 首先我们需要先New WebSocket构造函数
let url = config.wsUrl

this.ws = new WebSocket(url)

之后我们就可以在ws上去监听WebSocket状态

  • 监听WebSocket连接
this.ws.addEventListener("open", e => {
       console.log('连接已经建立!');
       //连接建立完成后我们就可以发送消息    
        this.ws.send("heartbeat");  //发送消息
 })
 //或者
this.ws.onopen = () => {
    console.log('连接已经建立!');
}
  • 监听WebSocket接收消息
this.ws.addEventListener("message", (e) => {
       console.log('收到消息!', e);
       //收到消息后我们就可以对消息进行处理
})
//或者
this.ws.onmessage = (e) => {
    console.log('接受到信息', e);
}
  • 监听WebSocket连接关闭
this.ws.addEventListener("close", (e) => {
    console.log('连接已断开!');
 })
 //或者
this.ws.onclose = () => {
    console.log('连接已断开!');
}
  • 监听WebSocket错误
this.ws.addEventListener("error",(e)=>{
    console.log('报错', e);
})  
//或者
this.ws.onclose = (e) => {
    console.log('报错', e);
}

实际如何使用:

initWebSocket() {
	this.flag = false   //通过flag对websocket关闭后再重启
	//这里我把请求的路径放在了config文件中了(ws://10.168.245.148:7001)
	let url = config.wsUrl
	this.ws = new WebSocket(url)
	this.ws.addEventListener("open", e => {
		this.sendHeartbearTime = new Date().getTime()  //发送心跳时间
		this.getHeartbearTime = new Date().getTime()   //接收心跳时间
		this.timer = setInterval(_ => {
			this.sendHeartbearTime = new Date().getTime()  //重新获取发送心跳时间
			if (this.sendHeartbearTime - this.getHeartbearTime >= 20000 || !this.ws) {
				//间隔20s心跳超时重启
				clearInterval(this.timer)  //清除定时器
				this.flag = true
				this.ws && this.ws.close()
			} else {
				//向服务器发送消息
				this.ws.send("heart");
			}
		}, 1000);
	})
	this.ws.addEventListener("message", (e) => {
		console.log("收到消息", e);
		try {
			if (e.data != 'heart') {
				//处理接收后的操作
			} else {
				this.getHeartbearTime = new Date().getTime()  //重新获取接收心跳开始时间
			}
		} catch (e) {
			console.log(e);
		}
	})
	this.ws.addEventListener("close", (e) => {
		this.ws = null
		if (this.flag) this.initWebSocket() //重启websocket
	})
	this.ws.onerror = e => {
		this.ws = null
		console.log("错误", e);
	}
},
created() {
	//渲染的DOM开始时创建连接
	this.initWebSocket()
},
beforeDestroy() {
	//DOM销毁之前关闭连接
	this.ws && this.ws.close()
},

参考连接:
Vue-WebSocket原理及使用
Vue 使用websocket

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用WebSocket连接快递打印机插件,可以按照以下步骤进行: 1. 安装WebSocket库:Vue可以使用WebSocket库进行WebSocket连接,可以通过npm安装。 ``` npm install --save websocket ``` 2. 在Vue组件引入WebSocket库: ```javascript import WebSocket from 'websocket'; ``` 3. 创建WebSocket连接: ```javascript const ws = new WebSocket('ws://localhost:8080'); ``` 其,'ws://localhost:8080'是WebSocket的连接地址,需要根据实际情况进行修改。 4. 监听WebSocket连接状态: ```javascript ws.onopen = function(event) { console.log('WebSocket已连接'); }; ws.onclose = function(event) { console.log('WebSocket已关闭'); }; ws.onerror = function(event) { console.log('WebSocket连接错误'); }; ``` 5. 发送WebSocket消息: ```javascript ws.send('Hello, WebSocket!'); ``` 其,'Hello, WebSocket!'是要发送的消息内容,可以根据实际情况进行修改。 6. 接收WebSocket消息: ```javascript ws.onmessage = function(event) { console.log('收到消息:' + event.data); }; ``` 其,event.data是接收到的消息内容。 7. 使用快递打印机插件进行打印: 通过WebSocket连接快递打印机插件后,可以使用插件提供的接口进行打印操作,具体操作方式需要参考插件的使用文档。 注意事项: 1. WebSocket连接需要在mounted生命周期进行,保证Vue组件已经被渲染到页面。 2. 需要将WebSocket连接对象存储在Vue组件的data,方便在其他方法使用。 3. WebSocket连接可能存在跨域问题,需要在服务端进行相应的配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值