公司最近的項(xiàng)目需要用到WebSocket實(shí)現(xiàn)消息的適時(shí)推送,比如預(yù)警消息等,本文使用Spring Boot和JavaScript實(shí)現(xiàn)了快速demo
Websocket服務(wù)端 - Spring Boot
- 引入依賴:
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
- Websocket配置
@EnableWebSocket
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
- Websocket消息處理
監(jiān)聽事件open、message、close、error
@Slf4j
@Component
@ServerEndpoint(value = "/websocket")
@EnableScheduling
public class WebsocketHandler {
@OnOpen
public void onOpen(Session session) {
System.out.println("WebSocket connection opened: " + session.getId());
sessionSet.add(session);
}
@OnMessage
public void onMessage(String message, Session session) throws IOException {
System.out.println("Received message from client: " + message);
session.getBasicRemote().sendText("Hello, WebSocket client!");
}
@OnClose
public void onClose(Session session, CloseReason reason) {
System.out.println("WebSocket connection closed: " + session.getId() + ", Reason: " + reason.getReasonPhrase());
sessionSet.remove(session);
}
@OnError
public void onError(Session session, Throwable error) {
System.err.println("Error occurred on WebSocket connection: " + session.getId());
error.printStackTrace();
}
}
WebSocket客戶端 - JavaScript
//創(chuàng)建WebSocket
var socket = new WebSocket("ws://localhost:8080/websocket");
//監(jiān)聽消息
socket.onmessage = function(event) {
if (typeof event.data === 'string') {
// 接收到文本消息的處理邏輯
console.log("Received text message from server: " + event.data);
} else if (event.data instanceof Blob) {
// 接收到二進(jìn)制數(shù)據(jù)的處理邏輯
var reader = new FileReader();
reader.onload = function() {
var binaryData = reader.result;
console.log("Received binary data from server: " + binaryData);
};
reader.readAsArrayBuffer(event.data);
} else {
console.log("Received message from server: " + event.data);
}
};
//發(fā)送消息給服務(wù)器
socket.send("hello world");