javascript - Spring Boot - 我将如何实现 Web 套接字来制作一个简单的聊天系统?
问题描述
我正在尝试制作一个基本上有一个聊天系统的网站,任何人都可以在其中连接并互相聊天,有一个注册过程和登录过程,我已经实现了连接到数据库,现在最大和最令人困惑的部分正在实现聊天功能。
我正在使用 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");
}
}
聊天控制器.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;
}
}
消息模型.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 外观的一些图片
----我知道这很模糊,但如果有人可以指导我如何接近这样做,我将非常感激。
解决方案
你需要的是一个TCP
插座。进行必要的 WS 握手,然后从那里 websocket 帧只是 TCP 数据包。
潜在的题外话:
我在 C++ 网络服务器中使用 websockets 构建了类似的东西,用于实时公共聊天,其中所有用户都有唯一的身份,并且可以在加载后立即使用聊天。它没有实现登录系统,但它确实有一个数据库,它存储来自记录用户名和时间的用户的所有消息。使用 c++ 嵌入式网络服务器和嵌入式 SQL 解决方案与 websockets 进行网络聊天的结果相当简洁。使用 c++ 后端监控套接字和 Web 前端使我能够确保快速处理用户活动和连接状态,以提供流畅的实时聊天环境。
聊天在线:https ://1338th.com
如果这对您解决自己的问题有任何兴趣,请告诉我。
推荐阅读
- javascript - 如何在本机反应中制作“组件条件”
- intellij-idea - IntelliJ 代码分析右上角的概述并分析检查显示不同的数据
- java - 如何从演示者解析 JSON 并设置为 RecyclerView(Android)
- python - 代码没有为决策函数返回正确的结果
- xml - Odoo name_get 如何在两个 many2one 字段中显示不同的显示名称?
- java - 无法从 Spring Cloud 配置或环境变量中解密属性
- c# - ASP .Net MVC Filepond 在控制器中获取文件唯一 ID
- javascript - 绕过打印对话框在加载时自动打印
- java - 映射 UML 图到 Java 代码转换
- javascript - 字符串匹配函数返回一个数组,但如果转换为数字,则返回匹配的数字