在Spring Boot中,可以使用WebSocket實現點對點發送消息。WebSocket是一種在單個TCP連接上進行全雙工通信的協議,它可以在Web瀏覽器和服務器之間建立一個持久連接,使得服務器可以主動向客戶端推送數據。
以下是使用Spring Boot實現點對點發送消息的步驟:
pom.xml
文件中添加以下依賴:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new WebSocketHandler(), "/ws").setAllowedOrigins("*");
}
}
上述示例代碼中,WebSocketHandler()
是自定義的WebSocket處理器,/ws
是WebSocket的端點路徑。
public class WebSocketHandler extends TextWebSocketHandler {
private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
// 處理收到的消息
for (WebSocketSession s : sessions) {
s.sendMessage(message);
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
sessions.remove(session);
}
}
上述示例代碼中,afterConnectionEstablished()
方法在WebSocket連接建立時調用,handleTextMessage()
方法用于處理收到的文本消息,afterConnectionClosed()
方法在WebSocket連接關閉時調用。
@RestController
@RequestMapping("/api")
public class MessageController {
@Autowired
private SimpMessagingTemplate messagingTemplate;
@PostMapping("/send/{userId}")
public void sendMessage(@PathVariable("userId") String userId, @RequestBody String message) {
messagingTemplate.convertAndSendToUser(userId, "/ws", message);
}
}
上述示例代碼中,sendMessage()
方法用于發送消息到指定的WebSocket連接。
至此,點對點發送消息的實現就完成了。你可以通過向/api/send/{userId}
發送POST請求,傳遞userId
和message
參數來發送消息。
請注意,上述示例只是演示了基本的點對點發送消息的實現方式。在實際應用中,你可能需要根據具體的需求進行進一步的開發和優化。