springboot怎么使用websocket来完成点对点聊天
时间: 2023-12-23 09:23:04 浏览: 162
使用 Spring Boot 来实现 WebSocket 的点对点聊天可以分为以下几个步骤:
1. 添加依赖
在 pom.xml 文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2. 创建 WebSocket 配置类
创建一个 WebSocket 配置类,配置并启用 WebSocket:
```java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new ChatWebSocketHandler(), "/chat").setAllowedOrigins("*");
}
}
```
上面的代码中,我们创建了一个 `WebSocketConfig` 类,实现了 `WebSocketConfigurer` 接口的 `registerWebSocketHandlers` 方法。在该方法中,我们创建了一个 `ChatWebSocketHandler` 处理器,并将其映射到 `/chat` 路径上。
3. 创建 WebSocket 处理器
创建一个 WebSocket 处理器,处理 WebSocket 的连接、消息和关闭等操作:
```java
public class ChatWebSocketHandler extends TextWebSocketHandler {
private static final Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.put(session.getId(), session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
for (WebSocketSession s : sessions.values()) {
if (s.isOpen() && !s.getId().equals(session.getId())) {
s.sendMessage(message);
}
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
sessions.remove(session.getId());
}
}
```
上面的代码中,我们创建了一个 `ChatWebSocketHandler` 类,继承了 `TextWebSocketHandler` 类。在该处理器中,我们使用了一个 `ConcurrentHashMap` 来保存所有 WebSocket 连接的会话。当有新的 WebSocket 连接时,我们将其会话保存到 `sessions` 中。当有消息发送时,我们遍历 `sessions` 中的所有会话,并将消息发送给其他的会话。当有 WebSocket 连接关闭时,我们从 `sessions` 中移除该会话。
4. 创建控制器
创建一个控制器,处理页面请求和 WebSocket 连接:
```java
@Controller
public class ChatController {
@RequestMapping("/chat")
public String chat() {
return "chat";
}
}
```
上面的代码中,我们创建了一个 `ChatController` 类,使用 `@RequestMapping` 注解来映射页面请求,并返回 `chat` 字符串,表示返回 `chat.html` 页面。在该页面中,我们可以使用 JavaScript 来连接 WebSocket。
5. 创建页面
创建一个 HTML 页面,包含 JavaScript 代码,使用 WebSocket 连接到服务器:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebSocket Chat</title>
</head>
<body>
<textarea id="chat-window" style="width: 100%; height: 300px;"></textarea>
<input type="text" id="chat-message" style="width: 100%;">
<button id="chat-send">Send</button>
<script>
var ws = new WebSocket('ws://' + window.location.hostname + ':8080/chat');
ws.onopen = function() {
console.log('WebSocket opened');
};
ws.onmessage = function(event) {
var message = event.data;
var chatWindow = document.getElementById('chat-window');
chatWindow.innerHTML += message + '\n';
chatWindow.scrollTop = chatWindow.scrollHeight;
};
ws.onclose = function() {
console.log('WebSocket closed');
};
var chatMessage = document.getElementById('chat-message');
var chatSend = document.getElementById('chat-send');
chatSend.onclick = function() {
var message = chatMessage.value;
ws.send(message);
chatMessage.value = '';
};
</script>
</body>
</html>
```
上面的代码中,我们创建了一个 HTML 页面,使用 JavaScript 来连接 WebSocket,并在页面中显示聊天记录和发送消息。
6. 运行应用程序
在终端中进入项目目录,执行以下命令运行应用程序:
```
mvn spring-boot:run
```
现在你可以在浏览器中打开 `http://localhost:8080/chat` 地址,开始点对点聊天了。
阅读全文