java - 如何在java中重新连接websocket?

标签 java websocket

我有一个简单的 Java WebSocket 客户端。有时与 WebSocket 服务器的连接可能会丢失。连接丢失后如何自动重连?

import javax.websocket.*;
import java.net.URI;

@ClientEndpoint
public class WebsocketClientEndpoint {

Session userSession = null;

public WebsocketClientEndpoint(URI endpointURI) {
    try {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        container.connectToServer(this, 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;
}

@OnMessage
public void onMessage(String message) {
    System.out.println("Received message: "+ message);
}

public void sendMessage(String message) {
    this.userSession.getAsyncRemote().sendText(message);
}
}

测试应用

import java.net.URI;
import java.net.URISyntaxException;
public class TestApp {

public static void main(String[] args) {
    try {
        final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("ws://localhost:8080/websocket/api"));

        while (true) {
            Thread.sleep(30000);
        }

    } catch (Exception ex) {
        System.err.println("Exception: " + ex.getMessage());
    }
}
}

java中有简单的WebSocket客户端和测试类。有时与 WebSocket 服务器的连接可能会丢失。连接丢失后如何自动重连?

最佳答案

重新连接不属于 WebSocket JSR 356 Specs并且必须通过编写具体的逻辑来实现。

但是,您可以使用具有 ReconnectHandler 的客户端库,例如“Tyrus”。 基本上,它有 APIS 来捕获 onDisconnect 、 onConnectFailure 等事件,可用于重新连接。

请参阅此链接了解如何使用它:Tyrus Reconnect Handler

API Doc Here

关于java - 如何在java中重新连接websocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56544437/

相关文章:

java - 为什么 JVM 类加载器必须在第一次主动使用之前才​​报告问题?

java - Selenium:无法打印存储的 IMDB 热门电影和评级列表中的所有值

python - 在带有协议(protocol)升级的 nginx 反向代理后面运行 daphne 总是路由到 http 而不是 websocket

java - 在 list 中指定 -javaagent 选项

java - 从java中的RestController返回多种(xml和json)格式

java - 使用 IntelliJ IDEA 调试 Java 时如何可视化整个矩阵?

ruby - 在 Sinatra 应用程序中处理事件流连接

java - Websocket:如何将消息推送给目标用户

javascript - 如何从 HTML 客户端调用 Websocket?

javascript - 对于一段时间内未发送消息的已连接网络套接字,chrome 是否有超时?