赞
踩
为了实现优雅重连和重试,您需要在代码中添加一些逻辑来处理连接失败或断开连接的情况。
实现代码如下:
- import javax.websocket.*;
- import java.io.IOException;
-
- @ClientEndpoint
- public class WebSocketClientEndpoint {
-
- private Session userSession = null;
- private MessageHandler messageHandler;
- private int retryCount = 0;
-
- public WebSocketClientEndpoint(String endpointURI) {
- try {
- WebSocketContainer container = ContainerProvider.getWebSocketContainer();
- container.connectToServer(this, URI.create(endpointURI));
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @OnOpen
- public void onOpen(Session userSession) {
- System.out.println("opening websocket");
- this.userSession = userSession;
- }
-
- @OnClose
- public void onClose(Session userSession, CloseReason reason) {
- System.out.println("closing websocket");
- this.userSession = null;
- retryConnect();
- }
-
- @OnMessage
- public void onMessage(String message) {
- if (this.messageHandler != null) {
- this.messageHandler.handleMessage(message);
- }
- }
-
- @OnOpenException
- public void onOpenException(Exception ex) {
- System.out.println("Error opening websocket: " + ex.getMessage());
- retryConnect();
- }
-
- private void retryConnect() {
- if (retryCount < 5) {
- try {
- Thread.sleep(1000); // 等待1秒后重试连接
- WebSocketContainer container = ContainerProvider.getWebSocketContainer();
- container.connectToServer(this, URI.create("ws://localhost:8080/my-websocket-endpoint"));
- retryCount++;
- } catch (Exception e) {
- System.out.println("Error reconnecting: " + e.getMessage());
- retryConnect(); // 如果连接失败,继续重试连接
- }
- } else {
- System.out.println("Max retries reached, giving up.");
- }
- }
-
- public void sendMessage(String message) throws IOException {
- this.userSession.getBasicRemote().sendText(message);
- }
-
- public void addMessageHandler(MessageHandler handler) {
- this.messageHandler = handler;
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。