vue使用sockjs实现websocket

本文介绍如何利用SockJS和STOMP.js实现WebSocket连接,包括安装依赖、配置客户端认证信息、建立及断开连接等步骤,并提供封装后的组件使用案例。

1.引入

npm install sockjs-client

npm install stompj

注意:在引入后启动项目报错net 模块找不到时,需要进入module的stompjs中

cd node_modules

cd stompjs

执行

npm install net

2.组件中使用

import SockJS from  'sockjs-client';
import  Stomp from 'stompjs';
methods: {
  if(this.stompClient===""){
    this.connection();
  }
}
beforeDestroy() {
if(this.stompClient){
    this.disconnect();
}
},
methods: {
connection() {
    // 建立连接对象
    let socket = new SockJS('后台服务地址');
    // 获取STOMP子协议的客户端对象
    this.stompClient = Stomp.over(socket);
    this.stompClient.heartbeat.outgoing=20000;//前端对后台连接心跳监控间隔
    this.stompClient.heartbeat.incoming=0;//后台对前端心跳监控,若为0则不进行心跳监控
    // 定义客户端的认证信息,按需求配置
    let headers = {
        Authorization:用户身份验证信息
    }
    // 向服务器发起websocket连接
    this.stompClient.connect(headers,() => {
        this.stompClient.subscribe('订阅服务名称', (msg) => { // 订阅服务端提供的某个topic
            console.log('成功')
            console.log(msg);  // msg.body存放的是服务端发送给我们的信息
        },headers);
    }, (err)=>{
        console.log('失败')
        let errres=JSON.stringify(err);
      /*  if(errres.indexOf('Lost connection')>-1){
            this.connection();
        }*/重连判断
    });
},    //连接 后台
disconnect() {
    if (this.stompClient) {
        this.stompClient.disconnect();
    }
},  // 断开连接
}2.封装使用

封装成js引用

import SockJS from  'sockjs-client';
import  Stomp from 'stompjs';
export const initFirst=()=>{
    // 建立连接对象
    let stompClient="";
    let socket = new SockJS('https://m-nurse.xiaohudaojia.com//websocket/stomp');
    // 获取STOMP子协议的客户端对象
    stompClient = Stomp.over(socket);
    stompClient.heartbeat.outgoing=20000;
    stompClient.heartbeat.incoming=0;
    return stompClient;
}
export const connection=(mystompClient,callback)=>{
        // 定义客户端的认证信息,按需求配置
        let headers = {
            Authorization:用户身份验证信息
        }
        // 向服务器发起websocket连接
        mystompClient.connect(headers,() => {
            mystompClient.subscribe('订阅名称', (msg) => { // 订阅服务端提供的某个topic
                callback(msg);
            },headers);
        }, (err)=>{
            let errdata={
                type:"err",
                model:"",
                msg:err };
            callback(errdata);
        });
};
export const disconnect=(mystompClient)=>{
    if(mystompClient) {
        mystompClient.disconnect();
    }
}

组件中使用:

import {initFirst,connection,disconnect} from "js地址";

methods: {
if(this.stompClient===""){

this.stompClient=initFirst();

connection(this.stompClient,callback函数);
}
}
beforeDestroy() {
if(this.stompClient){
this.disconnect();
}

 

 


 

### Vue3使用 SockJSWebSocket 实现订阅功能 在 Vue3 项目中实现 WebSocket 通信并完成订阅功能,可以参考以下代码示例和步骤。通过使用 SockJS 和 STOMP 协议,能够轻松地与后端建立 WebSocket 连接,并订阅特定的消息主题。 #### 1. 安装依赖 首先需要安装 `sockjs-client` 和 `@stomp/stompjs` 库来支持 WebSocket 和 STOMP 协议。 ```bash npm install sockjs-client @stomp/stompjs ``` #### 2. 封装 WebSocket 工具类 创建一个工具类文件(例如 `src/utils/websocket.js`),用于管理 WebSocket 的连接、订阅和断开操作。 ```javascript // src/utils/websocket.js import SockJS from &#39;sockjs-client&#39;; import { Client } from &#39;@stomp/stompjs&#39;; let stompClient = null; export function connect(url, callback) { const socket = new SockJS(url); stompClient = new Client({ webSocketFactory: () => socket, brokerURL: url, debug: (str) => console.log(str), reconnectDelay: 5000, heartbeatIncoming: 4000, heartbeatOutgoing: 4000 }); stompClient.onConnect = () => { stompClient.subscribe(&#39;/topic/messages&#39;, (message) => { if (callback) { callback(message.body); } }); }; stompClient.activate(); } export function disconnect() { if (stompClient) { stompClient.deactivate(); stompClient = null; } } ``` #### 3. Vue 组件集成 在 Vue3 组件中引入封装好的 WebSocket 工具类,并在组件生命周期中完成连接、订阅和断开操作。 ```vue <template> <div> <div>收到消息: {{ receivedMsg }}</div> </div> </template> <script> import { connect, disconnect } from &#39;@/utils/websocket&#39;; export default { data() { return { receivedMsg: &#39;&#39; }; }, mounted() { connect(&#39;http://localhost:8088/ws&#39;, (msg) => { this.receivedMsg = msg; }); }, beforeUnmount() { disconnect(); } }; </script> ``` #### 4. 后端配置(Spring Boot 示例) 如果使用 Spring Boot 作为后端服务,可以通过以下方式配置 WebSocket 支持[^2]。 - 添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` - 配置 WebSocket: ```java @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").withSockJS(); } } ``` - 发送消息: ```java @Controller public class MessageController { @Autowired private SimpMessagingTemplate template; @GetMapping("/sendMessage") public void sendMessage() { this.template.convertAndSend("/topic/messages", "Hello, WebSocket!"); } } ``` 通过以上步骤,可以在 Vue3 项目中成功实现 WebSocket 的订阅功能,并与后端进行实时通信。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值