Spring Boot - 我将如何实现 Web 套接字来制作一个简单的聊天系统?
Posted
技术标签:
【中文标题】Spring Boot - 我将如何实现 Web 套接字来制作一个简单的聊天系统?【英文标题】:Spring Boot - How would I implement Web sockets to make a simple chatting system? 【发布时间】:2021-10-25 02:06:28 【问题描述】:我正在尝试制作一个基本上有一个聊天系统的网站,任何人都可以在其中连接并互相聊天,我已经实现了一个注册过程和登录过程,连接到一个数据库,现在是最大的和最令人困惑的部分是实现聊天功能。
我将 JSP 用于视图和 vanilla javascript
我已经尝试过教程,但我似乎无法弄清楚很多事情
一旦用户登录网站,他们应该可以立即使用聊天功能(会显示他们的姓名等),如果其他用户登录,他们应该能够通过聊天相互交流(老实说,我不知道实现它是简单还是复杂)
目前,来自在线教程。我有这些设置 WebSocket 的类。
WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer
@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
registry.addEndpoint("/safespot").withSockJS();
@Override
public void configureMessageBroker(MessageBrokerRegistry registry)
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
ChatController.java
@Controller
public class ChatController
@MessageMapping("/chat.register")
@SendTo("/topic/public")
public MessageModel register(@Payload MessageModel message, SimpMessageHeaderAccessor headerAccessor)
headerAccessor.getSessionAttributes().put("username", message.getSender());
return message;
@MessageMapping("/chat.send")
@SendTo("/topic/public")
public MessageModel sendMessage(@Payload MessageModel message)
return message;
MessageModel.java
public class MessageModel
private String content;
private String sender;
private MessageType type;
public enum MessageType
CHAT,LEAVE,JOIN
public String getContent()
return content;
public void setContent(String content)
this.content = content;
public String getSender()
return sender;
public void setSender(String sender)
this.sender = sender;
public MessageType getType()
return type;
public void setType(MessageType type)
this.type = type;
聊天框本身的jsp
<div id="chat-page">
<div class="chat-container">
<!-- Header of the chat Box -->
<div class="chat-header">
<h1 class="chat-heading mb-1">Welcome</h1>
<p class="chat-para mb-1">Please be respectful in the chat</p>
</div>
<div class="connecting">Connecting...</div>
<!-- This is where the chat output will appear -->
<ul id="messageArea">
</ul>
<!-- Input box -->
<form id="messageForm" name="messageForm" nameForm="messageForm">
<div class="form-group">
<div class="input-group clearfix">
<input type="text" id="message" placeholder="Type a message..." autocomplete="off" class="form-control"
style="border-radius: 0; color: #fff" />
<button type="button" class="chat-send-btn">Send</button>
</div>
</div>
</form>
</div>
</div>
UI 外观的一些图片
Main page
The chat box
----我知道这很模糊,但如果有人可以指导我如何接近这样做,我将非常感激。
【问题讨论】:
【参考方案1】:您需要的是一个TCP
套接字。进行必要的 WS 握手,然后从那里 websocket 帧只是 TCP 数据包。
可能的题外话: 我已经在使用 websockets 的 c++ 网络服务器中构建了类似的东西,用于实时公共聊天,其中所有用户都有唯一的身份,并且可以在加载后立即使用聊天。它没有实现登录系统,但它确实有一个数据库,它存储来自记录用户名和时间的用户的所有消息。使用 c++ 嵌入式网络服务器和嵌入式 SQL 解决方案与 websockets 进行网络聊天的结果相当简洁。使用 c++ 后端监控套接字和 Web 前端使我能够确保快速处理用户活动和连接状态,以提供流畅的实时聊天环境。 聊天在线:https://1338th.com
如果您对解决自己的问题感兴趣,请告诉我。
【讨论】:
,我会调查一下,谢谢,所以实现这个功能不会很难吧?以上是关于Spring Boot - 我将如何实现 Web 套接字来制作一个简单的聊天系统?的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot入坑-spring-boot-starter-web配置文件使用
如何使用Spring Boot/Spring Cloud 实现微服务应用
实战:Spring Boot 程序如何做好 Web 层的测试
实战:Spring Boot 程序如何做好 Web 层的测试