vue前端websocket的配置转发

这篇博客介绍了WebSocket的配置方法,包括在配置文件中设置目标地址、启用WebSocket和路径重写。在Vue文件中,详细展示了如何初始化WebSocket连接,处理消息接收、关闭及错误事件,并提供了WebSocket连接创建的逻辑。博客还指出了一种可能导致创建多个连接的错误情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是配置文件

'/socket': {
   target: 'http://192.168.0.12:8086',
   ws: true,
   changeOrigin: true,
   pathRewrite: {
      '^/socket': '/'
   }
 }

然后是在vue文件中的使用

var websock = null;

var global_callback = null;
//var serverPort = "8086"; // webSocket连接端口
//var wsuri = "ws:" + window.location.hostname + ":" + serverPort+'/socket/websocket';
//var wsuri = "ws://192.168.0.12:8086/websocket";

var wsuri = "ws:" + window.location.host+'/socket/websocket';
function createWebSocket(callback) {

  if (websock == null || typeof websock !== WebSocket) {
    initWebSocket(callback);
  } 
}

function initWebSocket(callback) {
  global_callback = callback;
  // 初始化websocket
  websock = new WebSocket(wsuri);
  websock.onmessage = function (e) {
    websocketonmessage(e);
  };
  websock.onclose = function (e) {
    websocketclose(e);
  };
  websock.onopen = function () {
    websocketOpen();
  };

  // 连接发生错误的回调方法
  websock.onerror = function () {
    console.log("WebSocket连接发生错误");
     //createWebSocket();啊,发现这样写会创建多个连接,加延时也不行
  };
}

### 使用 Spring Boot 和 Vue 实现 WebSocket 功能集成 #### 添加依赖项 为了实现基于 Spring Boot 的 WebSocket 服务,首先需要引入必要的 Maven 或 Gradle 依赖。以下是 Maven 中的配置: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 上述依赖允许开发者构建支持 WebSocket 协议的服务端应用[^1]。 #### 创建 WebSocket 配置类 通过定义一个 `WebSocketConfig` 类来启用并配置 WebSocket 支持。该类需继承自 `AbstractWebSocketMessageBrokerConfigurer` 并重写相关方法: ```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(); // 注册 WebSocket 终端点 } } ``` 此代码片段实现了 STOMP over WebSocket 的基本设置,其中 `/ws` 是客户端连接到服务器的终端点地址[^2]。 #### 处理消息控制器 创建一个控制器用于接收和响应来自前端的消息。例如: ```java @Controller public class ChatController { @MessageMapping("/chat") @SendTo("/topic/messages") public Message sendMessage(Message message) throws Exception { Thread.sleep(100); // 模拟延迟处理时间 return new Message(message.getFrom(), message.getText()); } } // 数据传输对象 (DTO) class Message { private String from; private String text; // 构造函数、getter 和 setter 方法省略... } ``` 以上逻辑表明当接收到发往 `/chat` 路径的消息时会自动将其转发至订阅者列表中的所有客户机上显示出来[^3]。 #### 前端 Vue.js 实现 在 Vue.js 方面,则可以通过 sockjs-client 及 stomp-js 这两个库完成与后台交互的部分工作流程如下所示: 安装所需 npm 包: ```bash npm install --save sockjs-client@latest stompjs@latest ``` 编写组件代码样例: ```javascript <script setup lang="ts"> import SockJS from 'sockjs-client'; import * as Stomp from 'stompjs'; let wsClient = null; onMounted(() => { const socket = new SockJS('http://localhost:8080/ws'); wsClient = Stomp.over(socket); wsClient.connect({}, frame => { console.log(`Connected: ${frame}`); wsClient.subscribe('/topic/messages', response => { console.log(response.body); }); }); }); const sendMessage = () => { if (!wsClient || !wsClient.connected) return alert("Not connected!"); let msgContent = document.getElementById("messageInput").value.trim(); if(msgContent.length === 0){ alert("Please enter a valid message."); return ; } wsClient.send("/app/chat", {}, JSON.stringify({from:"User",text:msgContent})); }; </script> <template> <div id="container"> <input type="text" placeholder="Type your message here..." id="messageInput"/> <button v-on:click="sendMessage">Send</button> </div> </template> ``` 上面展示了如何利用 JavaScript 封装好的 API 接口去建立持久化双向通信链路以及监听特定主题下的更新通知事件[^4][^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值