最简单入门的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

相关文章

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三