Java を使用して Websocket の切断と再接続を処理する方法
Websocket は、クライアントとサーバー間の双方向通信を実現するために使用される TCP ベースのプロトコルです。実際のアプリケーションでは、ネットワークの不安定やサーバーの再起動により Websocket が切断される場合があります。通信の継続性を確保するには、クライアントに切断と再接続の機能を実装する必要があります。
この記事では、Java を使用して Websocket の切断と再接続を処理する方法を紹介し、具体的なコード例を示します。
まず、Java Websocket ライブラリの依存関係を導入する必要があります。 Maven プロジェクトでは、pom.xml ファイルに次の依存関係を追加できます。
<dependencies> <dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.5.1</version> </dependency> </dependencies>
次に、Websocket クライアントを作成する必要があります。 WebSocketClient
から継承された終了クラス。このクラスでは、接続の確立、切断、メッセージ受信のロジックを処理するために、onOpen
、onClose
、onMessage
などのメソッドをオーバーライドする必要があります。
import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; import java.net.URI; import java.net.URISyntaxException; public class MyWebsocketClient extends WebSocketClient { public MyWebsocketClient(String serverUri) throws URISyntaxException { super(new URI(serverUri)); } @Override public void onOpen(ServerHandshake handshakedata) { // 连接建立成功 System.out.println("Websocket连接已建立"); } @Override public void onClose(int code, String reason, boolean remote) { // 连接断开 System.out.println("Websocket连接已断开"); // 进行断线重连 try { this.reconnect(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onMessage(String message) { // 接收到消息 System.out.println("Received: " + message); } }
Websocket クライアントを使用する前に、Websocket クライアント インスタンスを作成し、connect
メソッド Connect to を呼び出す必要があります。ターゲットサーバー。
public class Main { public static void main(String[] args) { try { // 创建Websocket客户端实例 MyWebsocketClient client = new MyWebsocketClient("ws://localhost:8080/websocket"); // 连接到服务器 client.connect(); } catch (Exception e) { e.printStackTrace(); } } }
上記のコードでは、onClose
で reconnect
メソッドを呼び出します。メソッドの切断と再接続を実現します。ここでは、スケジュールされたタスクを使用してサーバーに定期的に再接続できます。
import org.java_websocket.client.WebSocketClient; import java.net.URI; import java.net.URISyntaxException; import java.util.Timer; import java.util.TimerTask; public class MyWebsocketClient extends WebSocketClient { private Timer timer; private boolean isConnected; public MyWebsocketClient(String serverUri) throws URISyntaxException { super(new URI(serverUri)); this.timer = new Timer(); this.isConnected = false; } @Override public void onOpen(ServerHandshake handshakedata) { // 连接建立成功 System.out.println("Websocket连接已建立"); this.isConnected = true; } @Override public void onClose(int code, String reason, boolean remote) { // 连接断开 System.out.println("Websocket连接已断开"); this.isConnected = false; // 进行断线重连 this.reconnect(); } @Override public void onMessage(String message) { // 接收到消息 System.out.println("Received: " + message); } private void reconnect() { if (!this.isConnected) { this.timer.schedule(new TimerTask() { @Override public void run() { try { // 重新连接 MyWebsocketClient.this.reconnect(); // 连接到服务器 MyWebsocketClient.this.connect(); } catch (Exception e) { e.printStackTrace(); } } }, 5000); } } } public class Main { public static void main(String[] args) { try { // 创建Websocket客户端实例 MyWebsocketClient client = new MyWebsocketClient("ws://localhost:8080/websocket"); // 连接到服务器 client.connect(); } catch (Exception e) { e.printStackTrace(); } } }
上記のコード例を通じて、Websocket の切断と再接続の処理メカニズムを Java で実装しました。 Websocket 接続が切断されると、通信の継続性を維持するためにサーバーへの再接続が自動的に試行されます。
以上がJava を使用して Websocket の切断と再接続を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。