AsyncHttpClientを使用したWebSocket
1. 前書き
AsyncHttpClient(AHC)は、非同期HTTP呼び出しを簡単に実行し、WebSocketプロトコルで通信するために作成された、Nettyに基づくライブラリです。
このクイックチュートリアルでは、WebSocket接続を開始し、データを送信し、さまざまな制御フレームを処理する方法を説明します。
2. セットアップ
ライブラリの最新バージョンはMaven Centralにあります。 com.ning:の依存関係ではなく、グループIDorg.asynchttpclientの依存関係を使用するように注意する必要があります。
org.asynchttpclient
async-http-client
2.2.0
3. WebSocketクライアント設定
WebSocketクライアントを作成するには、最初にこのarticleに示されているHTTPクライアントを取得し、WebSocketプロトコルをサポートするようにアップグレードする必要があります。
WebSocketプロトコルのアップグレードの処理は、WebSocketUpgradeHandlerクラスによって行われます。 このクラスはAsyncHandlerインターフェースを実装し、ビルダーも提供します。
WebSocketUpgradeHandler.Builder upgradeHandlerBuilder
= new WebSocketUpgradeHandler.Builder();
WebSocketUpgradeHandler wsHandler = upgradeHandlerBuilder
.addWebSocketListener(new WebSocketListener() {
@Override
public void onOpen(WebSocket websocket) {
// WebSocket connection opened
}
@Override
public void onClose(WebSocket websocket, int code, String reason) {
// WebSocket connection closed
}
@Override
public void onError(Throwable t) {
// WebSocket connection error
}
}).build();
WebSocket接続オブジェクトを取得するために、標準のAsyncHttpClientを使用して、ヘッダー、クエリパラメーター、タイムアウトなどの優先接続の詳細を含むHTTPリクエストを作成します。
WebSocket webSocketClient = Dsl.asyncHttpClient()
.prepareGet("ws://localhost:5590/websocket")
.addHeader("header_name", "header_value")
.addQueryParam("key", "value")
.setRequestTimeout(5000)
.execute(wsHandler)
.get();
4. データを送信する
WebSocketオブジェクトwe can check whether the connection is successfully opened using the isOpen() methodを使用します。 sendTextFrame()およびsendBinaryFrame()メソッドを使用してwe can send data frames with a string or binary payloadの接続を開くと、次のようになります。
if (webSocket.isOpen()) {
webSocket.sendTextFrame("test message");
webSocket.sendBinaryFrame(new byte[]{'t', 'e', 's', 't'});
}
5. コントロールフレームの処理
WebSocketプロトコルは、ping、pong、closeの3種類の制御フレームをサポートしています。
The ping and pong frame are mainly used to implement a “keep-alive” mechanism for the connection.sendPingFrame()およびsendPongFrame()メソッドを使用してこれらのフレームを送信できます。
webSocket.sendPingFrame();
webSocket.sendPongFrame();
sendCloseFrame()メソッドを使用するClosing the existing connection is done by sending a close frame。このメソッドでは、ステータスコードと接続を閉じる理由をテキスト形式で提供できます。
webSocket.sendCloseFrame(404, "Forbidden");
6. 結論
WebSocketプロトコルをサポートしていることは、非同期HTTP要求を簡単に実行する方法を提供するという事実に加えて、AHCを非常に強力なライブラリにします。
記事のソースコードはover on GitHubで入手できます。