Java:WebSocketクライアントを作成する

JavaアプリをWebSocketクライアントにしてみる。前提条件としては、既にWebSocketサーバが存在するものとする。これには様々なやり方があり、例えばJettyのwebsocket-clientを使ってJetty独自のAPIを使うこともできるのだが、ここでは標準のjavax.websocket-APIを使う方法にする。

tyrus-standaloneライブラリの取り込み

Gradleの場合、以下の一行を入れればよい。

implementation group: 'org.glassfish.tyrus.bundles', name: 'tyrus-standalone-client', version: '1.15'

クライアントコード

ウェブソケットのクライアント。

import javax.websocket.*;

@ClientEndpoint
public class EchoClient {

  @OnOpen
  public void onOpen(Session session) {
    System.out.println("onOpen:" + session);
    try {
      session.getBasicRemote().sendText("sample text");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

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

  @OnError
  public void onError(Throwable th) {
    System.out.println("onError:" + th.getMessage());
  }

  @OnClose
  public void onClose(Session session) {
    System.out.println("onClose:" + session);
  }
}

接続

後は以下のように接続する。URIはあくまでも例。

import javax.websocket.*;
.....
      URI uri = URI.create("ws://localhost:8080/ws/echo");
      WebSocketContainer container = ContainerProvider.getWebSocketContainer();
      Session session = container.connectToServer(new EchoClient(), uri);