使用Spring Boot构建多人聊天室,支持WebSocket
随着互联网的发展,多人在线聊天室成为了一个热门的应用场景。WebSocket是一种在单个TCP连接上进行全双工通信的方式,它可以实现实时的双向通信,因此在开发多人在线聊天室时常用到。在本文中,我们将介绍如何使用SpringBoot搭建一个基于WebSocket的多人聊天室。一、环境搭建在开始之前,需要安装以下环境:JDK1.8或以上MavenIntell
随着互联网的发展,多人在线聊天室成为了一个热门的应用场景。WebSocket是一种在单个TCP连接上进行全双工通信的方式,它可以实现实时的双向通信,因此在开发多人在线聊天室时常用到。在本文中,我们将介绍如何使用Spring Boot搭建一个基于WebSocket的多人聊天室。
一、环境搭建
在开始之前,需要安装以下环境:
- JDK 1.8或以上
- Maven
- IntelliJ IDEA(或其他的IDE)
二、创建项目
选择一个空的Spring Boot项目,在pom.xml文件中添加以下依赖:
org.springframework.boot spring-boot-starter-websocket
三、编写Java程序
- 创建WebSocketConfig类
在项目的src/main/java目录下创建一个名为WebSocketConfig的Java类,并添加@EnableWebSocket注解,表示启用WebSocket。代码如下:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(chatRoomHandler(),"/chatRoom").withSockJS();
}
@Bean
public ChatRoomHandler chatRoomHandler() {
return new ChatRoomHandler();
}
}registerWebSocketHandlers方法用于注册WebSocket处理程序,这里我们使用ChatRoomHandler作为处理程序,并将它映射到/chatRoom路径上。withSockJS()方法表示启用SockJS支持。
- 创建ChatRoomMessage类
在项目的src/main/java目录下创建一个名为ChatRoomMessage的Java类,用于表示聊天室中的消息。代码如下:
public class ChatRoomMessage {
private String content;
private String sender;
private MessageType type;
// 省略getter和setter方法
}ChatRoomMessage中有三个字段,分别表示消息的内容、发送者和消息类型。MessageType是自定义的枚举类型,表示消息类型。
- 创建ChatRoomHandler类
在项目的src/main/java目录下创建一个名为ChatRoomHandler的Java类,用于处理WebSocket连接和消息的发送和接收。代码如下:
@Component
public class ChatRoomHandler extends TextWebSocketHandler {
// 保存WebSocketSession列表
private static List webSocketSessions = new CopyOnWriteArrayList<>();
// 处理WebSocket连接建立事件
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
webSocketSessions.add(session);
}
// 处理WebSocket连接关闭事件
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
webSocketSessions.remove(session);
}
// 处理WebSocket消息接收事件
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
ChatRoomMessage chatRoomMessage = new ObjectMapper().readValue(message.getPayload(), ChatRoomMessage.class);
chatRoomMessage.setSender(session.getId());
broadcast(chatRoomMessage);
}
// 广播消息给所有WebSocketSession
private void broadcast(ChatRoomMessage chatRoomMessage) throws IOException {
for (WebSocketSession webSocketSession : webSocketSessions) {
webSocketSession.sendMessage(new TextMessage(new ObjectMapper().writeValueAsString(chatRoomMessage)));
}
}
} ChatRoomHandler继承自TextWebSocketHandler,处理文本格式的WebSocket消息。在类中定义了一个静态的webSocketSessions列表,用于保存所有的WebSocketSession。在WebSocket连接建立时,将新的WebSocketSession加入webSocketSessions列表中,在WebSocket连接关闭时,将WebSocketSession从webSocketSessions列表中移除。在WebSocket消息接收时,将消息转换为ChatRoomMessage对象,并设置发送者为WebSocketSession的ID,并调用broadcast方法将消息广播给所有的WebSocketSession。
- 创建ChatRoomController类
在项目的src/main/java目录下创建一个名为ChatRoomController的Java类,用于处理聊天室页面的渲染和消息的发送。代码如下:
@Controller
public class ChatRoomController {
@GetMapping("/chatRoom")
public String chatRoom() {
return "chatRoom";
}
@MessageMapping("/sendMessage")
@SendTo("/topic/chatRoom")
public ChatRoomMessage sendMessage(ChatRoomMessage chatRoomMessage) {
return chatRoomMessage;
}
}ChatRoomController定义了一个映射到/chatRoom路径上的GET请求,返回聊天室的页面。同时,它还定义了一个映射到/sendMessage路径上的WebSocket消息,使用@SendTo注解将消息发送到/topic/chatRoom路径上。
- 创建Thymeleaf模板
在项目的src/main/resources/templates目录下创建一个名为chatRoom.html的Thymeleaf模板,用于渲染聊天室页面。
Spring Boot WebSocket Chat Room
Spring Boot WebSocket Chat Room
Thymeleaf模板中包含了一个Vue组件,用于渲染聊天室页面。同时,它还包含了Stomp.js和SockJS的引用,用于建立WebSocket连接和发送和接收消息。
四、运行程序
在IDE中运行程序,访问http://localhost:8080/chatRoom,进入聊天室页面。输入用户名并点击“Login”按钮,即可进入聊天室。在输入框中输入消息并点击“Send”按钮,即可发送消息。
五、总结
本文介绍了如何使用Spring Boot搭建一个基于WebSocket的多人聊天室。通过WebSocket的双向通信特性,可以实现实时交流,为多人在线聊天室应用提供了很大的便利。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许
Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator
Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。













