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

建立连接

javascript 复制代码
let customHeaders = {
        "userId":"adafadfafdafdadf",
        "token":"adfafafdasdfafdasfd"
      }
      // 创建SockJS对象
      let socket = new SockJS(this.websocketPath);

      // 创建Stomp客户端实例
      let stompClient = Stomp.over(this.socket);
      // 连接WebSocket
      let 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操作如下:

javascript 复制代码
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);
      // 连接WebSocket
      let stompClient.connect(customHeaders, frame => {
        console.log('Connected: ' + frame);
        this.connected = true
      }, error => {
        console.error('STOMP error:', error);
      });
相关推荐
蓝婷儿36 分钟前
每天一个前端小知识 Day 28 - Web Workers / 多线程模型在前端中的应用实践
前端
琹箐37 分钟前
Ant ASpin自定义 indicator 报错
前端·javascript·typescript
小小小小小惠41 分钟前
Responsetype blob会把接口接收的二进制文件转换成blob格式
前端·javascript
爱电摇的小码农41 分钟前
【深度探究系列(5)】:前端开发打怪升级指南:从踩坑到封神的解决方案手册
前端·javascript·css·vue.js·node.js·html5·xss
kymjs张涛1 小时前
零一开源|前沿技术周报 #7
android·前端·ios
爱编程的喵1 小时前
React入门实战:从静态渲染到动态状态管理
前端·javascript
Tttian6221 小时前
npm init vue@latestnpm error code ETIMEDOUT
前端·vue.js·npm
患得患失9492 小时前
【前端】【组件库开发】【原理】【无框架开发】现代网页弹窗开发指南:从基础到优化
前端
运维咖啡吧2 小时前
给朋友们分享个好消息 7天时间23.5k
前端·程序员·ai编程
元气小嘉2 小时前
前端技术小结
开发语言·前端·javascript·vue.js·人工智能