最简单入门的SpringBoot+Vue项目用WebSoket完整教程代码,做客服,即时通信的看过来!

本文主要是介绍最简单入门的SpringBoot+Vue项目用WebSoket完整教程代码,做客服,即时通信的看过来!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

后端原理不是很复杂 每次用户连接到服务端的时候会携带一个username,连接成功之后后端把username和当前soket添加到Map中

webSocketMap.put(username, this);

需要给指定用户发送消息的时候就通过username获取WebSoketServer通过.getBasicRemote().sendText()向用户发送消息

 for (Map.Entry<String, SongWebSoketServer> server : webSocketMap.entrySet()) {if(server.getKey().equals("接收消息的用户名")){server.getValue().session.getBasicRemote().sendText("想要发送的消息");}}

需要发送复杂消息的情况下可以New一个JSON对象

	JSONObject jsonObject = new JSONObject();jsonObject.put("code", 200);jsonObject.put("message", message);jsonObject.toJSONString();

完整代码:

前端页面中比较简单

<template><el-input v-model="content" /><el-button @click="send">发送</el-button>
</template>
<script>
export default {data() {return {socket: "",content: '',}},created() {this.init();},methods: {init: function () {if (typeof (WebSocket) === "undefined") {alert("您的浏览器不支持socket");} else {// 需要服务器配置开放后端端口// 实例化socketthis.socket = new WebSocket("ws://localhost:8080/websocket/" + "username");// 监听socket连接this.socket.onopen = this.open;// 监听socket错误信息this.socket.onerror = this.error;// 监听socket消息this.socket.onmessage = this.getMessage;}},open: function () {console.log("socket连接成功");},error: function () {console.log("连接错误");},getMessage: function (msg) {console.log(msg)},send: function () {this.socket.send(this.content);this.content = "";},close: function () {console.log("socket已经关闭");}},destroyed() {this.socket.onclose = this.close; // 销毁监听}
}
</script>
<style lang="scss" scoped>
</style>

SpirngBoot项目中创建WebSoket模块

pom中引入
 <!-- SpringBoot Websocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>
新建WebSoketServer
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;@Component
@Service
@ServerEndpoint(value = "/websocket/{username}")
public class WebSoketServer {static final Logger loggger = LoggerFactory.getLogger(WebSoketServer.class);private static ConcurrentHashMap<String, WebSoketServer> webSocketMap = new ConcurrentHashMap<>();  // 用来存放每个客户端对应的MyWebSocket对象。   private Session session;    private String username = "";   // 接收username// 打开连接@OnOpenpublic void onOpen(Session session, @PathParam("username") String username) throws IOException {this.session = session;this.username = username;if (webSocketMap.containsKey(username)) {webSocketMap.remove(username);webSocketMap.put(username, this);} else {webSocketMap.put(username, this);}loggger.info("用户:" + username + "连接:当前在线人数为:" + webSocketMap.size());}// 关闭连接@OnClosepublic void onClose() {if (webSocketMap.containsKey(username)) {webSocketMap.remove(username);}loggger.info("用户" + username + "退出:当前在线人数为:" + webSocketMap.size());}// 接收消息@OnMessagepublic void onMessage(String message, Session session) {loggger.info("用户" + username + "消息:内容:" + message);}// 发送自定义消息public static void sendInfo(String message, String username) {loggger.info("发送消息到:" + username + ",内容:" + message);if (StringUtils.isNotBlank(username) && webSocketMap.containsKey(username)) {try {webSocketMap.get(username).sendMessage(message);} catch (Exception e) {loggger.error(e.getMessage(), e);}} else {loggger.error("用户" + username + ",不在线!");}}@OnErrorpublic void onError(Session session, Throwable error) {loggger.error("用户" + username + "错误:原因:" + error.getMessage());error.printStackTrace();}// 推送消息public void sendMessage(String message) throws IOException {this.session.getBasicRemote().sendText(message);}
}

这篇关于最简单入门的SpringBoot+Vue项目用WebSoket完整教程代码,做客服,即时通信的看过来!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/279854

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF