vue基于sockjs-client+stompjs实现websocket客户端

devtools/2024/9/19 0:39:05/ 标签: vue.js, websocket, 前端

        在之前的一欸文章中,介绍了好几种前端实现websocket客户端与服务端通信的方式。本章主要采用的是socketjs的方式。

        SockJS 是一个浏览器 JavaScript 库,提供类似 WebSocket 的对象。它为浏览器提供了紧密遵循 HTML5 WebSockets API 的 JavaScript API,并在浏览器和 Web 服务器之间创建了低延迟、全双工、跨域通信通道。

        在幕后,SockJS 首先尝试使用原生 WebSocket。如果失败,它还可以使用多种特定于浏览器的传输协议,并通过 WebSocket 类似的抽象呈现它们。SockJS 设计目标是在所有现代浏览器中工作,包括不支持 WebSocket 协议的环境,例如限制性严格的公司代理环境中。

        sockjs-client是从SockJS中分离出来的用于客户端使用的通信模块.所以我们就直接来看看SockJS. SockJS是一个浏览器的JavaScript库,它提供了一个类似于网络的对象,SockJS提供了一个连贯的,跨浏览器的JavaScriptAPI,它在浏览器和Web服务器之间创建了一个低延迟,全双工,跨域通信通道. 这得益于SockJS的一大特性,一些浏览器中缺少对WebSocket的支持,因此,回退选项是必要的,而Spring框架提供了基于SockJS协议的透明的回退选项。SockJS提供了浏览器兼容性,优先使用原生的WebSocket,如果某个浏览器不支持WebSocket,SockJS会自动降级为轮询。

        在使用上,使用sockjs-client和websocket没有什么区别。主要的实现都可以参考之前一篇文章。本篇只是针对不一样的地方进行说明。

使用sockjs-clien实现websocket需要引入相关组件:

npm install webstomp-client
npm install sockjs-client

建立连接

let customHeaders = {"userId":"adafadfafdafdadf","token":"adfafafdasdfafdasfd"}// 创建SockJS对象let socket = new SockJS(this.websocketPath);// 创建Stomp客户端实例let stompClient = Stomp.over(this.socket);// 连接WebSocketlet stompClient.connect(customHeaders, frame => {console.log('Connected: ' + frame);this.connected = true}, error => {console.error('STOMP error:', error);});

         请求头的设置,可以放在connect时,但是后端无法在握手的拦截器和处理器中获取自定义的请求头信息。

        如果想在握手拦截器和处理器获取相关自定义的请求头信息并做处理。SockJS-client 并没有提供直接设置 HTTP 请求头的方法,因为它是通过 WebSocket 连接进行通信的。

        但是,如果你需要设置 WebSocket 请求头,你可以通过 SockJS 的 iframe 传输机制来实现。SockJS 使用 iframe 来作为一个传输通道,在这个通道内进行 HTTP 请求,然后通过这个通道建立 WebSocket 连接。你可以在这个 iframe 的初始 HTTP 请求中设置你需要的请求头。jurisdiction操作如下:

let customHeaders = {"userId":"adafadfafdafdadf","token":"adfafafdasdfafdasfd"}// 创建SockJS对象let socket = new SockJS(this.websocketPath, null, {// 这是传递给传输构造函数的选项对象transportOptions: {websocket: {url: this.websocketPath,protocols: ['websocket'],// 在这里设置你的自定义请求头headers: customHeaders}}});// 创建Stomp客户端实例let stompClient = Stomp.over(this.socket);// 连接WebSocketlet stompClient.connect(customHeaders, frame => {console.log('Connected: ' + frame);this.connected = true}, error => {console.error('STOMP error:', error);});

http://www.ppmy.cn/devtools/110590.html

相关文章

在vscode中用virtual env的方法

vscode是非常常用的软件开发工具。我们也非常了解如何使用vscode开发python的基本方法。当然,vscode可以开发基本所有编程语言。真的是又大又全又好用。 那么为什么要在vscode里面使用virtual env呢?因为python开发会遇到包管理的问题。而virtual env可…

深度学习速通系列:如何计算文本相似度

计算文本相似度是自然语言处理(NLP)中的一个常见任务,用于衡量两个文本片段在语义上的相似性或相关性。以下是一些常用的方法: 余弦相似度: 将文本转换为向量(例如,使用词袋模型或TF-IDF&#x…

AI语音机器人:通过 Azure Speech 实现类人类的交互

语音对话的重要性 在竞争日益激烈的客户互动领域,人工智能语音对话正成为重中之重。随着数字参与者的崛起,组织认识到语音机器人的强大力量,它是一种自然而直观的沟通方式,可以提供类似人类的体验,深度吸引用户&#…

科研绘图系列:R语言柱状图分布(histogram plot)

文章目录 介绍加载R包读取数据画图介绍 柱状图(Bar Chart)是一种常用的数据可视化图表,用于展示和比较不同类别或组的数据。它通过在二维平面上绘制一系列垂直或水平的柱子来表示数据的大小,每个柱子的长度或高度代表一个数据点的数值。柱状图非常适合于展示分类数据的分布…

FastAPI进阶:Form参数在API设计中的最佳实践

在FastAPI中,当你想要从form-data(通常在HTML表单中使用)中获取数据时,你需要使用Form类来声明这些参数。这告诉FastAPI,这些参数应该从请求的表单数据中获取,而不是从查询参数或请求体(JSON&am…

Google 释出 Android 15 源代码

Google 向 Android Open Source Project(AOSP)释出了 Android 15 源代码。 Android 15 将在未来几周内推送给 Pixel 手机,未来几个月推送给三星、摩托罗拉、一加和小米等厂商的兼容手机。 Android 15 的新特性包括:简化 passkey 的登陆,防盗…

中国剩余定理和扩展中国剩余定理(模板)

给你一元线性同余方程组&#xff0c;如下&#xff1a; 其中&#xff0c;当 , , ... , 两两互质的话就是中国剩余定理 &#xff0c; 不互质的话就是扩展中国剩余定理。 给出中国剩余定理的计算过程和扩展中国剩余定理的推理过程&#xff1a; #include<bits/stdc.h> us…

isis与ospf高级属性

文章目录 前言一、基础配置(配置各设备的IP地址)二、配置各设备的ospf与isis三、检查ospf与isis邻居是否建立成功1.实现快速重路由2.流量过滤方法3.引入默认路由4.配置等价路由 前言 在下面实验中&#xff0c;蓝色区域运行ospf&#xff0c;为了控制ospf的lsdb数量&#xff0c;…

.gitnore | git

前言 新创建工程的时候, 我们将现有业务代码提交到git仓库后. 但是后面发现有一些文件你不想要每次都提交, ,比如你的编译链接临时文件。 这个时候你需要创建一个.gitignore 来取消文件追踪 所遇问题 使用gitignore 帮我写把根目录下的文件夹Listings和Objects都忽略追踪 …

CCF推荐C类会议和期刊总结:(计算机网络领域)

CCF推荐C类会议和期刊总结&#xff08;计算机网络领域&#xff09; 在计算机网络领域&#xff0c;中国计算机学会&#xff08;CCF&#xff09;推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结&#xff0c;包括全称、出版社、dblp文献网…

【JVM】Java内存分配与回收:深入理解Java内存管理

Java内存分配与回收&#xff1a;深入理解Java内存管理 引言 Java虚拟机&#xff08;JVM&#xff09;的内存管理是确保Java应用程序性能和稳定性的关键。理解Java的内存分配方式和回收过程对于开发者来说至关重要。 基础知识 JVM内存模型&#xff1a;JVM内存分为堆&#xff…

2024.9.11

时钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QTimer> #include <QPainter> #include <QPen> #include <QBrush> #include <QTime> #include <QDebug> QT_BEGIN_NA…

Vue3:重新赋值来“清空”这个引用ref([])

在 Vue 3 中&#xff0c;如果你使用了 Composition API&#xff0c;特别是 ref 来创建一个响应式的引用&#xff08;在这个例子中是一个数组&#xff09;&#xff0c;你可以通过简单地重新赋值来“清空”这个引用。但是&#xff0c;要注意的是&#xff0c;当你这样做时&#xf…

hadoop dfs web页面访问增加鉴权

前言 装好了Hadoop&#xff0c;通过浏览器访问&#xff0c;发现竟然不需要鉴权就能访问&#xff0c;且暴露了很多服务器层文件路径信息&#xff0c;基于多年积累的安全意识&#xff0c;必须得配置些鉴权信息&#xff0c;就有了该文&#xff0c;仅做学习记录&#xff0c;下次自…

[杂项]pugi::xml获取xml中的注释节点

前言 想到学习xml时的一句话&#xff0c;xml中注释也会被算作一个节点。那么我们就可以通过 pugixml 把注释节点获取出来&#xff0c; <?xml version"1.0"?> <mesh name"mesh_root"><!--这是一个注释节点-->some text<![CDATA[so…

永成防回水防回气装置脚踏实地老厂家

永成防回水防回气装置脚踏实地老厂家&#xff0c;分歧式防爆器是安装在瓦斯抽放管路中的简易防爆装置。 来吧&#xff0c;有业务就冲着我来。 别让我的同行太辛苦&#xff0c; 我在这里&#xff0c;等你来。 本防回水防回气装置是一种用于煤矿瓦斯管路爆渣和燃烧时防止回火、防…

CSGHub携手Nvidia NIM、阿里计算巢打造企业级私有化部署解决方案

强强联合 人工智能与大数据的迅速发展&#xff0c;大模型的推理应用和资产管理已成为企业数字化转型的重要组成部分&#xff0c;企业正寻求高效、安全的AI模型部署解决方案。为应对日益增长的计算需求和复杂的数据管理挑战&#xff0c;CSGHub、Nvidia和阿里云计算巢强强联手&a…

Elasticsearch设置密码报错:ERROR: X-Pack Security is disabled by configuration.

elasticsearch@6ef6c3f5ee45:~$ bin/elasticsearch-setup-passwords auto Unexpected response code [405] from calling GET http://172.17.0.2:9200/_security/_authenticate?pretty It doesn’t look like the X-Pack security feature is enabled on this Elasticsearch n…

搜维尔科技:TechViz 虚拟会议室-多人协同混合现实协作

TechViz虚拟会议室-多人协同混合现实协作 搜维尔科技&#xff1a;TechViz 虚拟会议室-多人协同混合现实协作

GAMES101(7节,着色,插值)

Shading着色 光线传播越远&#xff0c;强度越小 冯氏光照 / Blinn-Phong着色模型&#xff1a; 环境光&#xff08;常量&#xff09;&#xff1a;颜色 * 强度 法线n&#xff0c;观测方向v&#xff0c;光照方向I&#xff0c;反射光线R&#xff0c;半程向量H&#xff08;V和I的角…