SpringBoot+WebSocket实现多人在线聊天案例实例

作者:#Hideonbush 时间:2022-08-22 11:53:08 

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.6.3</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.yl</groupId>
   <artifactId>chat01</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>chat01</name>
   <description>Demo project for Spring Boot</description>
   <properties>
       <java.version>11</java.version>
   </properties>
   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-websocket</artifactId>
       </dependency>

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

<!--前端库依赖-->
       <dependency>
           <groupId>org.webjars</groupId>
           <artifactId>sockjs-client</artifactId>
           <version>1.1.2</version>
       </dependency>
       <dependency>
           <groupId>org.webjars</groupId>
           <artifactId>stomp-websocket</artifactId>
           <version>2.3.3</version>
       </dependency>
       <dependency>
           <groupId>org.webjars</groupId>
           <artifactId>jquery</artifactId>
           <version>3.5.1</version>
       </dependency>
       <dependency>
           <groupId>org.webjars</groupId>
           <artifactId>webjars-locator-core</artifactId>
<!--            <version>0.48</version>-->
       </dependency>
   </dependencies>

<build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>

</project>

2.消息实体类

package com.yl.chat01.domain;

import java.io.Serializable;

public class Message implements Serializable {
   private String name;
   private String content;

public String getName() {
       return name;
   }

public void setName(String name) {
       this.name = name;
   }

public String getContent() {
       return content;
   }

public void setContent(String content) {
       this.content = content;
   }

@Override
   public String toString() {
       return "Message{" +
               "name='" + name + '\'' +
               ", content='" + content + '\'' +
               '}';
   }
}

3.controller

package com.yl.chat01.controller;

import com.yl.chat01.domain.Message;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;

@Controller
public class GreetingController {

@MessageMapping("/hello") //发送消息请求
   @SendTo("/topic/greetings") //消息广播
   public Message greeting(Message message) {
       return message;
   }
}

4.WebSocket的配置文件

package com.yl.chat01.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

// 注册端点,用于前端建立连接的
   @Override
   public void registerStompEndpoints(StompEndpointRegistry registry) {
       registry.addEndpoint("/chat").withSockJS();
   }

// 配置消息代理,通过广播的形式来传递消息
   @Override
   public void configureMessageBroker(MessageBrokerRegistry registry) {
       registry.enableSimpleBroker("/topic");
   }
}

5.前端发送消息页面

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
   <script src="/webjars/jquery/jquery.min.js"></script>
   <script src="/webjars/sockjs-client/sockjs.min.js"></script>
   <script src="/webjars/stomp-websocket/stomp.min.js"></script>
</head>
<body>
<div>
   <label for="username">请输入用户名:</label>
   <input type="text" id = "username" placeholder="用户名"/>
</div>

<div>
   <input type="button" value="连接" id="connect"/>
   <input type="button" value="断开连接" id="disconnect" disabled="disabled"/>
</div>
<div id="chat"></div>

<div>
   <label for="content">请输入聊天内容</label>
   <input type="text" id="content" placeholder="聊天内容"/>
</div>
<input type="button" value="发送" disabled="disabled" id="send"/>

<script>
   var stompClient;
   $(function () {
       //连接
       $("#connect").click(function () {
           connect()
       })
       //发送消息到后台
       $("#send").click(function () {
           stompClient.send("/hello",{},JSON.stringify({'name':$('#username').val(),'content':$("#content").val()}))
       })

//断开连接
       $("#disconnect").cilck(function () {
           stompClient.disconnect();
           disableButton(false);
       })

})
   function connect() {
       if (!$("#username").val()) {
           alert("请输入用户名")
           return;
       }

//获取连接地址
       var socketjs = new SockJS("/chat");
       stompClient = Stomp.over(socketjs);
       //建立连接
       stompClient.connect({},function (frame) {
           alert("connect success")
           disableButton(true);
           //订阅消息
           stompClient.subscribe("/topic/greetings",function (obj) {
               var msg = JSON.parse(obj.body);
               $("#chat").append("<div>"+msg.name+ ":" + msg.content+"</div>")
           })
       })
   }

function disableButton(connected) {
       $("#connect").prop("disabled",connected);
       $("#disconnect").prop("disabled",!connected);
       $("#send").prop("disabled",!connected);
   }
</script>
</body>
</html>

6.测试

6.1.客户端A

SpringBoot+WebSocket实现多人在线聊天案例实例

6.2.客户端B

SpringBoot+WebSocket实现多人在线聊天案例实例

来源:https://blog.csdn.net/weixin_41359273/article/details/122849598

标签:SpringBoot,WebSocket,聊天
0
投稿

猜你喜欢

  • ActiveMQ结合Spring收发消息的示例代码

    2023-11-24 06:01:12
  • Java实现LeetCode(1.两数之和)

    2021-06-03 02:11:19
  • Java语法中Lambda表达式无法抛出异常的解决

    2022-10-13 01:04:43
  • Mybatis延迟加载和缓存深入讲解

    2022-06-02 15:50:43
  • Spring Cloud Zuul路由网关服务过滤实现代码

    2021-08-26 10:56:07
  • Java画笔的简单实用方法

    2021-11-01 05:38:10
  • 详解Spring MVC 集成EHCache缓存

    2022-05-28 04:42:52
  • java反射获取包下所有类的操作

    2022-02-12 16:06:15
  • Shiro 控制并发登录人数限制及登录踢出的实现代码

    2023-09-18 02:03:56
  • Go&java算法之最大数示例详解

    2023-10-30 08:54:56
  • SPRING IOC注入方式过程解析

    2023-10-11 12:59:13
  • Java 实现FTP服务实例详解

    2023-06-18 10:45:25
  • 一文带你了解Java中的函数式编程

    2022-08-02 07:32:29
  • 基于spring security实现登录注销功能过程解析

    2023-11-29 06:09:05
  • java中的session对象及其常用方法小结

    2023-11-25 02:31:33
  • 浅谈Java中的重载,重写,多态,静态绑定、动态绑定

    2023-10-10 02:40:05
  • Java线程池 ThreadPoolExecutor 详解

    2021-05-24 10:35:42
  • Java BeanPostProcessor与BeanFactoryPostProcessor基础使用讲解

    2022-10-25 21:52:35
  • Springboot整合FreeMarker的实现示例

    2023-04-09 00:57:57
  • 基于swing实现窗体拖拽和拉伸

    2023-11-12 22:32:40
  • asp之家 软件编程 m.aspxhome.com