HOWTO · Java

Java の WebSocket クライアント

このチュートリアルでは、Java で WebSocket クライアントを作成する方法を示します。

このページの内容

このチュートリアルでは、Java で WebSocket クライアントを作成する方法を示します。

Java の WebSocket クライアント

WebSocket を使用して、クライアントとサーバー間の通信チャネルを作成できます。 WebSocket プロトコルは、Web 通信に使用される HTTP と互換性があります。

WebSocket プロトコルには、HTTP に対する 2つの改善点があります。1つ目は、HTTP よりもオーバーヘッドが低く、2つ目は双方向の Web 通信です。

クライアントとサーバーは WebSocket 通信の一部であり、クライアントはデータの送受信に使用され、サーバーは通信に使用されます。

WebSocket を使用してクライアントを作成してみましょう。

  • まず、クラスに ClientEndpoint のアノテーションを付ける必要があります。
  • 次に、ClientManager を作成し、クライアントであるアノテーション付きのエンドポイントに接続するように依頼する必要があります。 URI はサーバーを指定します。
  • 接続が確立されると、ロジックはサーバーと同様になります。
  • メソッドが開くとき、メッセージが受信されるとき、または接続がメソッドを閉じるとき、onOpen()、onMessage()、または onClose() が自動的に呼び出されます。

上記のポイントを使用したクライアントの例を次に示します。

package delftstack;

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

@ClientEndpoint
public class Client_Endpoint {
  @OnOpen
  public void onOpen(Session Client_Session) {
    System.out.println("--- Connection Successful " + Client_Session.getId());
    try {
      Client_Session.getBasicRemote().sendText("Start");
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  @OnMessage
  public String onMessage(String Client_Message, Session Client_Session) {
    BufferedReader Buffered_Reader = new BufferedReader(new InputStreamReader(System.in));
    try {
      System.out.println("--- Message Received " + Client_Message);
      String User_Input = Buffered_Reader.readLine();
      return User_Input;
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

  @OnClose
  public void onClose(Session Client_Session, CloseReason Close_Reason) {
    System.out.println("--- Session ID: " + Client_Session.getId());
    System.out.println("--- Closing Reason: " + Close_Reason);
  }

  public static void main(String[] args) {
    ClientManager Client_Manager = ClientManager.createClient();
    try {
      URI uri = new URI("ws://localhost:8080");
      Client_Manager.connectToServer(MyClientEndpoint.class, uri);
      while (true) {
      }
    } catch (DeploymentException | URISyntaxException | InterruptedException e) {
      e.printStackTrace();
    }
  }
}

コードは、チャット ベースのシステムのクライアントを実装します。 接続が開くと、クライアントは Client_Session.getBasicRemote().sendText() を使用してサーバーにメッセージを送信します。

サーバーはメッセージを受信し、同じ文字列で応答します。 これにより、メソッド onMessage() がクライアントで実行されます。

onMessage() メソッドは、このシステムのユーザー入力からメッセージを読み取ります。