springboot websocket实现单发群发
时间: 2023-12-03 20:40:26 浏览: 26
以下是使用SpringBoot实现单发和群发消息的WebSocket示例代码:
1. 首先,需要在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2. 创建WebSocket配置类,用于注册WebSocket处理程序:
```java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MyWebSocketHandler(), "/websocket")
.addInterceptors(new HttpSessionHandshakeInterceptor());
}
}
```
3. 创建WebSocket处理程序,实现单发和群发消息的逻辑:
```java
public class MyWebSocketHandler 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
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
sessions.remove(session.getId());
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String payload = message.getPayload();
JSONObject jsonObject = JSONObject.parseObject(payload);
String type = jsonObject.getString("type");
String content = jsonObject.getString("content");
if ("single".equals(type)) {
String to = jsonObject.getString("to");
WebSocketSession toSession = sessions.get(to);
if (toSession != null && toSession.isOpen()) {
toSession.sendMessage(new TextMessage(content));
}
} else if ("group".equals(type)) {
for (WebSocketSession s : sessions.values()) {
if (s.isOpen()) {
s.sendMessage(new TextMessage(content));
}
}
}
}
}
```
4. 在控制器中注入WebSocket处理程序,并提供单发和群发消息的接口:
```java
@RestController
public class WebSocketController {
@Autowired
private MyWebSocketHandler webSocketHandler;
@PostMapping("/send/single")
public void sendSingleMessage(@RequestParam String to, @RequestParam String message) throws IOException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", "single");
jsonObject.put("to", to);
jsonObject.put("content", message);
TextMessage textMessage = new TextMessage(jsonObject.toJSONString());
for (WebSocketSession session : webSocketHandler.sessions.values()) {
if (session.isOpen()) {
session.sendMessage(textMessage);
}
}
}
@PostMapping("/send/group")
public void sendGroupMessage(@RequestParam String message) throws IOException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", "group");
jsonObject.put("content", message);
TextMessage textMessage = new TextMessage(jsonObject.toJSONString());
for (WebSocketSession session : webSocketHandler.sessions.values()) {
if (session.isOpen()) {
session.sendMessage(textMessage);
}
}
}
}
```
以上代码实现了一个简单的SpringBoot WebSocket应用程序,可以通过发送POST请求来发送单发和群发消息。