1. はじめに
WebSocket は、Web ブラウザとサーバー間のリアルタイム双方向通信のためのプロトコルです。従来の HTTP リクエスト/レスポンス モデルとは異なり、WebSocket を使用すると、クライアントがリクエストを開始する必要がなく、サーバーがクライアントにデータをアクティブにプッシュできます。もちろん、これまでのところ、WebSocket は Web ブラウザーに限定されず、モバイル アプリケーションやデスクトップ アプリケーションでも使用できます。
WebSocket の主な機能は次のとおりです。
-
双方向通信: WebSocket を使用すると、サーバーとクライアントの間で双方向のリアルタイム通信が可能になり、どちらの側でもメッセージを送信でき、もう一方の側ではメッセージをすぐに受信して処理できます。
-
永続的な接続: HTTP とは異なり、WebSocket 接続は永続的であり、一度接続が確立されると、一方が接続を閉じるまで開いたままになります。
-
低遅延: WebSocket は永続的な接続を確立するため、HTTP のハンドシェイクとヘッダーのオーバーヘッドを回避し、データ交換の遅延を低くします。
-
データ転送量の削減: WebSocket はバイナリ データ フレーム化と圧縮技術を使用してパケット サイズを削減するため、使用するデータ転送量が少なくなります。
WebSocket は、オンライン チャット アプリケーション、複数人コラボレーション ツール、リアルタイム データ監視やゲームなど、リアルタイム通信と即時更新を必要とするアプリケーションで広く使用されています。
2. 原則
WebSocket の基本的な通信原則は次のとおりです。
-
ハンドシェイク: WebSocket 通信は HTTP ハンドシェイク プロセスから始まります。クライアントは、HTTP リクエストをサーバーに送信して、WebSocket 接続の確立を要求します。このリクエストには、「Upgrade: WebSocket」や「Connection: Upgrade」などの特別なヘッダーが含まれています。サーバーがこの要求を受信した後、WebSocket プロトコルをサポートしている場合は、WebSocket 接続へのアップグレードに同意することを示すステータス コード 101 (プロトコルの切り替え) を含む HTTP 応答を送信します。
-
接続の確立: ハンドシェイクが成功すると、WebSocket 接続が確立されます。この時点で、クライアントとサーバー間の接続は HTTP プロトコルから WebSocket プロトコルに切り替わります。WebSocket は、TCP と同様の永続的な接続を使用して、使用するフレーム ヘッダー情報とバイナリ データ フレームを減らしてデータ送信量を削減します。
-
双方向通信: 接続が確立されると、クライアントとサーバーは非常に低い遅延で双方向通信できます。従来の要求/応答モデルに依存することなく、いつでもメッセージを送信できます。クライアントとサーバーはテキスト メッセージまたはバイナリ データを送信できます。WebSocket はフレーム (Frame) を使用して、これらのメッセージをカプセル化して送信します。
-
データフレーム(Frame): WebSocketのデータ送信はフレームの概念に基づいています。各データフレームは、フレームヘッダーとペイロード(Payload)で構成されます。フレーム ヘッダーには、いくつかの制御ビットとデータ長情報が含まれています。ペイロードはメッセージの内容です。データ フレームには、テキスト フレーム (UTF-8 でエンコードされたテキスト メッセージ) またはバイナリ フレーム (任意のバイナリ データ) を使用できます。
-
接続を閉じる: WebSocket 接続を閉じるには、一方の当事者が特別なクローズ フレーム (Close Frame) を送信できます。相手もクローズフレームを受信すると、クローズを確認するためにクローズフレームを送信します。このプロセスにより、双方が通信をクリーンアップして終了するために徐々に接続を閉じることができます。
3、使用する
Android で WebSocket を使用するのは非常に簡単です。手順は次のとおりです。
1. WebSocket ライブラリをインポートします。一般的に使用される WebSocket ライブラリは、WebSocket サポートを提供する OkHttp ライブラリです。
implementation 'com.squareup.okhttp3:okhttp:版本号'
2. WebSocket 接続を作成します。
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("ws://your-websocket-url").build();
WebSocket webSocket = client.newWebSocket(request, new WebSocketListener() {
@Override
public void onOpen(WebSocket webSocket, Response response) {
// 连接成功时的处理
}
@Override
public void onMessage(WebSocket webSocket, String text) {
// 接收到消息时的处理
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
// 关闭连接时的处理
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
// 连接失败时的处理
}
});
3. メッセージを送受信します。
//发送消息
webSocket.send("Hello World!");
// 接收消息
@Override
public void onMessage(WebSocket webSocket, String text) {
// 处理接收到的消息
}
4. 接続を閉じます。
webSocket.close(NORMAL_CLOSURE_STATUS, "Close");
これらは、WebSocket を使用して Android アプリケーションでリアルタイム通信を行うための基本的な手順です。