WebSocket 是一種用于實作雙向通信的網絡協定,它基于 TCP 協定,可以實作伺服器和用戶端之間的實時消息傳遞。 在 Java 中,我們可以使用 Java WebSocket API 來實作 WebSocket。
以下是使用 Java WebSocket API 實作 WebSocket 消息推送的示例:
1、建立 WebSocket 服務端 要建立 WebSocket 服務端,需要實作 javax.websocket.Endpoint 類。在類中,重寫 onOpen、onMessage、onClose 和 onError 方法,并在 onOpen 方法中注冊用戶端。下面是一個簡單的示例:
@ServerEndpoint("/websocket")
public class WebSocketServer {
private static Set<Session> clients = Collections.synchronizedSet(new HashSet<Session>());
@OnOpen
public void onOpen(Session session) {
// 添加用戶端
clients.add(session);
}
@OnMessage
public void onMessage(String message, Session session) {
// 處理消息
}
@OnClose
public void onClose(Session session) {
// 移除用戶端
clients.remove(session);
}
@OnError
public void onError(Throwable error, Session session) {
// 錯誤處理
}
}
2、釋出消息 要向用戶端釋出消息,可以使用 javax.websocket.Session.sendText() 方法。将消息發送給用戶端時,需要周遊所有連接配接的用戶端并将消息發送給每個用戶端。下面是實作方法:
public static void sendMessage(String message) {
for (Session session : clients) {
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
// 發送消息錯誤處理
}
}
}
3、用戶端實作 WebSocket 連接配接 要在用戶端建立 WebSocket 連接配接,需要使用 javax.websocket.ClientEndpoint 注解來聲明一個 Endpoint 類,并重寫 onOpen、onMessage、onClose 和 onError 方法。下面是一個簡單的示例:
@ClientEndpoint
public class WebSocketClient {
@OnOpen
public void onOpen(Session session) {
// 打開通信通道時發生
}
@OnMessage
public void onMessage(String message, Session session) {
// 處理接收到的消息
}
@OnClose
public void onClose(Session session, CloseReason reason) {
// 關閉連接配接
}
@OnError
public void onError(Session session, Throwable error) {
// 錯誤處理
}
}
4、連接配接伺服器 對于用戶端連接配接到伺服器,可以使用 javax.websocket.ContainerProvider 提供的靜态方法 getWebSocketContainer() 獲得 javax.websocket.WebSocketContainer 執行個體,來執行連接配接和開啟通信通道的操作。下面是一個代碼示例:
public static void connect(String endpointURI) {
try {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.connectToServer(WebSocketClient.class, URI.create(endpointURI));
} catch (DeploymentException | IOException e) {
// 錯誤處理
}
}
5、發送消息 發送消息可以在用戶端類中定義一個 send() 方法,調用 javax.websocket.Session.sendText() 向服務端發送資訊。下面是代碼示例:
public void send(String message) {
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
// 發送資訊錯誤處理
}
}