当前位置: 首页 > news >正文

vue基于sockjs-client+stompjs实现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);});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【STM32 Blue Pill编程】-定时器编码模式与旋转编码器
  • 【分治】归并排序
  • 有了 Cursor 后,真没理由说不会写代码了
  • 【面试分享】面试题——网络题目_网络面试题
  • 【高中物理】用代码缩写胡克定律公式原理图
  • linux 动态库的两种使用方式
  • 【编程基础知识】什么是数据库事务
  • SSL证书的申请和部署
  • 水库大坝安全监测方案,双重守护,安全无忧
  • 贸易洽谈2025中国(上海)国际磷化工展览会
  • 【pycharm-乱码】简单记录一下都有哪些涉及编码
  • Python教程(二十一) : 从零开始制作计算器应用【PyQt6】
  • WebGIS二维基础,地图开发必修框架:Canvas
  • ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 原生代码实现动态扩散效果
  • 会计凭证IDOC有关增强
  • hexo+github搭建个人博客
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • C++11: atomic 头文件
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • PHP 小技巧
  • PHP变量
  • react 代码优化(一) ——事件处理
  • Redis的resp协议
  • spring + angular 实现导出excel
  • vue的全局变量和全局拦截请求器
  • 百度小程序遇到的问题
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 扑朔迷离的属性和特性【彻底弄清】
  • 突破自己的技术思维
  • 白色的风信子
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # 透过事物看本质的能力怎么培养?
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #etcd#安装时出错
  • #Java第九次作业--输入输出流和文件操作
  • #Linux(权限管理)
  • $.ajax()
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)(2.10) LTM telemetry
  • (a /b)*c的值
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (LLM) 很笨
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (回溯) LeetCode 78. 子集
  • (九)信息融合方式简介