在vue2/3中使用stomp

本文介绍了在Vue2和Vue3应用中使用STOMP库进行WebSocket通信的步骤,包括通过npm安装stompjs,建立连接,设置订阅和心跳,以及如何发送和接收消息。连接URL由后端提供,连接成功后,订阅指定主题以接收消息。此外,还提及了STOMP的心跳机制和在特定环境下(如微信小程序)对stomp.js的修改需求。
摘要由CSDN通过智能技术生成

在vue2/3中使用stomp

参考文档

http://jmesnil.net/stomp-websocket/doc/

前置工作

文档中提供了两种使用方法, 一种是基于常规web socket的连接方法,另一种是基于自定义web socket的方法,请参看参考文档中以下两节:
In a Web browser with regular Web Socket
In the Web browser with a custom WebSocket
本文将会使用前者。

  1. 在项目中通过 npm i stompjs 下载stompjs包
  2. 在需要使用stomp进行通信的vue页面中引入 import Stomp from 'stompjs'

连接和订阅

  1. 确定连接的url 改url由后端给予,大致长:‘ws://xxx.xxx.com:8080/xxx/xxx’ 后面可能还会带有要传的内容,如token等,请自行拼接该字符串
  2. 通过该url进行连接,这一步将会使浏览器和服务器之间产生ws连接
    stompjs提供了以下方法进行连接:
 // 连接
 // 三个参数分别是header,连接成功的回调,失败的回调
 // header中的内容如果后端没有强调,可以直接为 {}
 client.connect(headers, connectCallback, errorCallback)
 // 订阅 两个参数分别是 主题 回调 返回一个订阅对象 包含了 订阅id 取消订阅的方法 unsubscribe
 client.subscribe("/queue/test", callback)
 // 实例
 let client = null
 let subscription = null
 let url = 'xxx.xxx.xxx:xxx/xxx/xxx?xxx=xxx'
 function initWs(){
	client = Stomp.client(url) // 创建stomp对象
	client.connect(
		{}, 
		(res)=>{ // 连接成功,此时可以在network中看到建立了ws连接
			// 在这里进行订阅 主题由后端提供
			const topic = '/xxxx/xxxx/xxxx
			subscription = client.subscribe(topic,(resp)=>{ // 这里的resp是stomp返回的message
				// ...
			})
		}, 
		(err)=>{ // 连接失败
			console.log(err)
		})
 }
 function stopSubscribe(){ // 取消订阅
	subscription.unsubscribe()
 }
 function closeConnect(){ // 关闭stomp连接
	client.disconnect()
 }
 

心跳

目前npm i stompjs 中的stomp.js设置了默认的心跳,默认值为10秒发一次

client.heartbeat.outgoing = 20000 // 20秒发一次
client.heartbeat.incoming = 0 // 客户端不接受心跳

这里插一句题外话,stomp中实现定时器用的是 window.setInterval
当在没有window对象的环境中使用时,会报错,比如微信小程序…此时需要对stomp.js文件进行修改,参看stomp.js中 Stomp.setInterval = function(){...} 部分,为stomp.setinterval和clearinterval赋值一个当前环境中可以使用的定时器即可

发送信息

参看参考文档中 Send messages 一节
提供了 client.send() 方法

Vue 3使用stomp-websocket,你可以按照以下步骤进行操作: 1. 首先,你需要安装stompjs和sockjs-client依赖。在你的Vue项目根目录下,打开终端并运行以下命令: ```shell npm install stompjs sockjs-client --save ``` 2. 在你需要使用stomp-websocket的组件,引入stompjs和sockjs-client库。你可以在Vue组件的`<script>`标签添加以下代码: ```javascript import { Stomp } from 'stompjs'; import SockJS from 'sockjs-client'; ``` 3. 接下来,你可以在组件的方法创建和管理stomp客户端连接。例如,在`created`钩子函数,可以添加以下代码: ```javascript created() { const socket = new SockJS('http://localhost:8080/your-websocket-endpoint'); // 替换为你的WebSocket端点URL this.stompClient = Stomp.over(socket); this.stompClient.connect({}, this.onConnect, this.onError); }, methods: { onConnect() { // 连接成功后的处理逻辑 }, onError(error) { // 连接失败后的处理逻辑 } } ``` 4. 在`onConnect`方法,你可以订阅并接收消息。例如: ```javascript onConnect() { this.stompClient.subscribe('/your-destination', (message) => { // 处理收到的消息 console.log(message.body); }); } ``` 这里的`/your-destination`是你想要订阅的目标地址。 5. 最后,当你不再需要连接时,记得在适当的时候断开连接: ```javascript beforeDestroy() { this.stompClient.disconnect(); } ``` 这样,你就可以在Vue 3使用stomp-websocket了。请注意,上述代码的URL和订阅目标地址需要根据你的实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值