Springboot+vue3整合websocket

springboot

pom.xml引入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

创建配置类

 

package com.example.demo1.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
public class WebSocketConfig {



    //自动注册了@ServerEndpoint
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }

}

创建接收消息的路径

package com.example.demo1.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpSession;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Slf4j
@ServerEndpoint(value = "/test")
@Component
public class TestController {

    //存储每一个客户端对象
   private static Map<String,Session> users=new ConcurrentHashMap<>();


    /**
     * 建立连接的时候 触发
     */
   @OnOpen
   public void onOpen(Session session){
        log.info("和服务端建立连接了");
        //将当前对象存储到map中 用户写死
        users.put("1",session);
   }


   @OnMessage
   public void onMessage(String message,Session session){
        log.info("接收到客户端发过来的消息:{}",message);
        //给客户端发送收到
       try {
           session.getBasicRemote().sendText("服务器收到消息了,给客户端发送收到");
       } catch (IOException e) {
           throw new RuntimeException(e);
       }
   }

   @OnClose
   public void onClose(Session session){
       log.info("连接被关闭了");
   }

   //如果你有多个用户的话  可以将消息转发给所有用户 做群聊
   private void send(String msg){
       for (Map.Entry<String, Session> x : users.entrySet()) {
           Session t=x.getValue();
           try {
               //异步发送文本消息
               t.getBasicRemote().sendText(msg);
           } catch (IOException e) {
               throw new RuntimeException(e);
           }
       }

   }

}

Vue3 

修改App.vue


<template>
  <input v-model="msg"/>
  <button @click="send">给服务器发消息</button>
</template>
<script setup lang="ts">
    import {onMounted,ref} from 'vue'
    //消息内容
    let msg=ref('')
    //创建对象 绑定接口
    let ws=new WebSocket("ws://localhost:8080/test");
    //初始化
    let init=()=>{
      //监听连接
      ws.onopen=open
      //监听错误信息
      ws.onerror=error
      //监听消息
      ws.onmessage=getMsg
      //断开连接
      ws.close=close
    }
    let open=()=>{
      console.log('连接成功')
    }
    let error=()=>{
      console.log('连接错误')
    }
    let getMsg=(message)=>{
        //接收服务器传过来的消息
        console.log('收到消息:'+message.data)
    }
    let close=()=>{
      console.log('连接关闭')
    }

    //发送消息
    let send=()=>{ 
       ws.send(msg.value)
    }


    //生命周期 挂载
    onMounted(() => {
      init();
    })
</script>

测试 

输入内容,给服务器发送消息,并且接收服务器发送过来的消息

服务器接收到客户端发过来的消息,并发送消息给客户端

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中实现与VueWebSocket整合可以通过以下步骤实现: 1. 在Spring Boot项目中添加WebSocket依赖。在pom.xml文件中添加以下依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 创建WebSocket配置类。创建一个配置类,用于配置WebSocket相关的Bean。示例代码如下: ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new MyWebSocketHandler(), "/websocket") .setAllowedOrigins("*"); } } ``` 3. 创建自定义的WebSocket处理程序。创建一个类,实现WebSocketHandler接口,并实现相关的方法。示例代码如下: ```java public class MyWebSocketHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 连接建立时触发的逻辑 } @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { // 收到消息时触发的逻辑 } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { // 通信发生错误时触发的逻辑 } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { // 连接关闭时触发的逻辑 } @Override public boolean supportsPartialMessages() { return false; } } ``` 4. 在Vue使用WebSocket。在Vue组件中,可以使用WebSocket对象进行连接和通信。示例代码如下: ```javascript data() { return { socket: null }; }, methods: { init() { // 创建WebSocket连接 this.socket = new WebSocket('ws://IP地址:端口号/websocket'); // 监听连接建立事件 this.socket.onopen = this.open; // 监听错误事件 this.socket.onerror = this.error; // 监听消息事件 this.socket.onmessage = this.getMessage; // 监听连接关闭事件 this.socket.onclose = this.close; }, open() { console.log("WebSocket连接成功"); }, error() { console.log("连接错误"); }, getMessage(message) { console.log("收到消息"); console.log(message); }, close() { console.log("连接关闭"); }, }, mounted() { this.init(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值