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

vue websocket 使用

基于webSocket通信的库主要有 socket.io,SockJS
关于SockJS的使用
先安装 sockjs-client 和 stompjs

npm install sockjs-client
npm install stompjs

import SockJS from  'sockjs-client';
import  Stomp from 'stompjs';

export default {
    data () {
        return {
            
        }
    },
    methods: {
        // ws连接
        initWebsockt () {
          this.connection()
          // 断开重连,尝试发送消息
          this.socketTimer = setInterval(() => {
            try {
              this.stompClient.send('msg')
            } catch (err) {
              console.log('websocket 请求断开了:', err)
              this.connection()
            }
          }, 5000)
        },
        connection () {
          // 建立连接
          let socket = new SockJS('http://172.16.40.154:9000/messageWarning-websocket')
          // 获取stomp子协议的客户端对象
          this.stompClient = Stomp.over(socket)
          let headers = { Authorization:'' }
          // 发送websocket连接
          this.stompClient.connect(headers,(frame) => {
            console.log('frame is:', frame)
            // 订阅服务
            this.stompClient.subscribe('/topic/messageWarning', (msg) => {
              console.log('广播成功')
              console.log(msg);  // msg.body存放的是服务端发送给我们的信息
            },headers)
          }, (err) => {
              // 连接发生错误时的处理函数
              console.log('失败')
              console.log(err);
          });
        },
        disconnect () {
          if (this.stompClient) {
            this.stompClient.disconnect()
          }
        }
    }
    beforeDestroy () {
        this.disconnect()
        clearInterval(this.socketTimer)
    }
}

sockjs-client

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

stomjs

    STOMP(Simple Text-Orientated Messaging Protocol) 面向消息的简单文本协议;
WebSocket是一个消息架构,不强制使用任何特定的消息协议,它依赖于应用层解释消息的含义.
与HTTP不同,WebSocket是处在TCP上非常薄的一层,会将字节流转化为文本/二进制消息,因此,对于实际应用来说,WebSocket的通信形式层级过低,因此,可以在 WebSocket 之上使用STOMP协议,来为浏览器 和 server间的 通信增加适当的消息语义。

STOMP与WebSocket 的关系:

    HTTP协议解决了web浏览器发起请求以及web服务器响应请求的细节,假设HTTP协议不存在,只能使用TCP套接字来编写web应用,你可能认为这是一件疯狂的事情;
直接使用WebSocket(SockJS)就很类似于使用TCP套接字来编写web应用,因为没有高层协议,就需要我们定义应用间发送消息的语义,还需要确保连接的两端都能遵循这些语义;
同HTTP在TCP套接字上添加请求-响应模型层一样,STOMP在WebSocket之上提供了一个基于帧的线路格式层,用来定义消息语义.

碰到的问题

    stomp.js:463 WebSocket connection to 'wss://${backend}/websocket' failed: Error during WebSocket handshake: Unexpected response code: 200

    解决方案:修改nginx配置
    部分参考 https://blog.csdn.net/hefeng_aspnet/article/details/142206508

    websocket Whoops! Lost connection to 'schema://${backend}/websocket'
    
    解决方案:后端添加jar包
    https://blog.csdn.net/AaronChen01/article/details/80019294

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Ubuntu】虚拟机安装USB摄像头ROS驱动 usb_cam(最新方法)
  • 机器学习--神经网络
  • 一文了解高速工业相机
  • 【Linux】—— muduo网络库的安装配置与使用
  • 【ansible】role流程实验
  • 硬件基础知识
  • 2024 屡发屡中的论文方向:时空预测!
  • Spring 事务与 MySQL 事务:深度解析与实战指南
  • 【mysql面试题】mysql复习之常见面试题(二)
  • 手把手教你实现大模型RAG系列教程- 01大模型应用技术介绍
  • 股指期权交易详细基础介绍
  • Mac 搭建仓颉语言开发环境(Cangjie SDK)
  • 【homebrew安装】踩坑爬坑教程
  • sql中拼接操作
  • 计算机三级网络技术总结(五)
  • [LeetCode] Wiggle Sort
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【mysql】环境安装、服务启动、密码设置
  • 【剑指offer】让抽象问题具体化
  • ECMAScript6(0):ES6简明参考手册
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue2 SSR 的优化之旅
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 构建工具 - 收藏集 - 掘金
  • 关于Java中分层中遇到的一些问题
  • 关于springcloud Gateway中的限流
  • 规范化安全开发 KOA 手脚架
  • 回顾2016
  • ------- 计算机网络基础
  • 聚簇索引和非聚簇索引
  • 普通函数和构造函数的区别
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 微信小程序填坑清单
  • 一天一个设计模式之JS实现——适配器模式
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 白色的风信子
  • ​iOS实时查看App运行日志
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​插件化DPI在商用WIFI中的价值
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • # Kafka_深入探秘者(2):kafka 生产者
  • ###STL(标准模板库)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (LeetCode 49)Anagrams
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (vue)页面文件上传获取:action地址
  • (动态规划)5. 最长回文子串 java解决
  • (二)原生js案例之数码时钟计时
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (回溯) LeetCode 77. 组合