当前位置:   article > 正文

Java连接websocket优雅断线、重连功能_java textwebsockethandler断开连接

java textwebsockethandler断开连接

      为了实现优雅重连和重试,您需要在代码中添加一些逻辑来处理连接失败或断开连接的情况。

实现代码如下:

  1. import javax.websocket.*;
  2. import java.io.IOException;
  3. @ClientEndpoint
  4. public class WebSocketClientEndpoint {
  5. private Session userSession = null;
  6. private MessageHandler messageHandler;
  7. private int retryCount = 0;
  8. public WebSocketClientEndpoint(String endpointURI) {
  9. try {
  10. WebSocketContainer container = ContainerProvider.getWebSocketContainer();
  11. container.connectToServer(this, URI.create(endpointURI));
  12. } catch (Exception e) {
  13. throw new RuntimeException(e);
  14. }
  15. }
  16. @OnOpen
  17. public void onOpen(Session userSession) {
  18. System.out.println("opening websocket");
  19. this.userSession = userSession;
  20. }
  21. @OnClose
  22. public void onClose(Session userSession, CloseReason reason) {
  23. System.out.println("closing websocket");
  24. this.userSession = null;
  25. retryConnect();
  26. }
  27. @OnMessage
  28. public void onMessage(String message) {
  29. if (this.messageHandler != null) {
  30. this.messageHandler.handleMessage(message);
  31. }
  32. }
  33. @OnOpenException
  34. public void onOpenException(Exception ex) {
  35. System.out.println("Error opening websocket: " + ex.getMessage());
  36. retryConnect();
  37. }
  38. private void retryConnect() {
  39. if (retryCount < 5) {
  40. try {
  41. Thread.sleep(1000); // 等待1秒后重试连接
  42. WebSocketContainer container = ContainerProvider.getWebSocketContainer();
  43. container.connectToServer(this, URI.create("ws://localhost:8080/my-websocket-endpoint"));
  44. retryCount++;
  45. } catch (Exception e) {
  46. System.out.println("Error reconnecting: " + e.getMessage());
  47. retryConnect(); // 如果连接失败,继续重试连接
  48. }
  49. } else {
  50. System.out.println("Max retries reached, giving up.");
  51. }
  52. }
  53. public void sendMessage(String message) throws IOException {
  54. this.userSession.getBasicRemote().sendText(message);
  55. }
  56. public void addMessageHandler(MessageHandler handler) {
  57. this.messageHandler = handler;
  58. }
  59. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号