Android での WebSocket の使用

1. はじめに

WebSocket は、Web ブラウザとサーバー間のリアルタイム双方向通信のためのプロトコルです。従来の HTTP リクエスト/レスポンス モデルとは異なり、WebSocket を使用すると、クライアントがリクエストを開始する必要がなく、サーバーがクライアントにデータをアクティブにプッシュできます。もちろん、これまでのところ、WebSocket は Web ブラウザーに限定されず、モバイル アプリケーションやデスクトップ アプリケーションでも使用できます。

WebSocket の主な機能は次のとおりです。

  1. 双方向通信: WebSocket を使用すると、サーバーとクライアントの間で双方向のリアルタイム通信が可能になり、どちらの側でもメッセージを送信でき、もう一方の側ではメッセージをすぐに受信して処理できます。

  2. 永続的な接続: HTTP とは異なり、WebSocket 接続は永続的であり、一度接続が確立されると、一方が接続を閉じるまで開いたままになります。

  3. 低遅延: WebSocket は永続的な接続を確立するため、HTTP のハンドシェイクとヘッダーのオーバーヘッドを回避し、データ交換の遅延を低くします。

  4. データ転送量の削減: WebSocket はバイナリ データ フレーム化と圧縮技術を使用してパケット サイズを削減するため、使用するデータ転送量が少なくなります。

WebSocket は、オンライン チャット アプリケーション、複数人コラボレーション ツール、リアルタイム データ監視やゲームなど、リアルタイム通信と即時更新を必要とするアプリケーションで広く使用されています。

2. 原則

WebSocket の基本的な通信原則は次のとおりです。

  1. ハンドシェイク: WebSocket 通信は HTTP ハンドシェイク プロセスから始まります。クライアントは、HTTP リクエストをサーバーに送信して、WebSocket 接続の確立を要求します。このリクエストには、「Upgrade: WebSocket」や「Connection: Upgrade」などの特別なヘッダーが含まれています。サーバーがこの要求を受信した後、WebSocket プロトコルをサポートしている場合は、WebSocket 接続へのアップグレードに同意することを示すステータス コード 101 (プロトコルの切り替え) を含む HTTP 応答を送信します。

  2. 接続の確立: ハンドシェイクが成功すると、WebSocket 接続が確立されます。この時点で、クライアントとサーバー間の接続は HTTP プロトコルから WebSocket プロトコルに切り替わります。WebSocket は、TCP と同様の永続的な接続を使用して、使用するフレーム ヘッダー情報とバイナリ データ フレームを減らしてデータ送信量を削減します。

  3. 双方向通信: 接続が確立されると、クライアントとサーバーは非常に低い遅延で双方向通信できます。従来の要求/応答モデルに依存することなく、いつでもメッセージを送信できます。クライアントとサーバーはテキスト メッセージまたはバイナリ データを送信できます。WebSocket はフレーム (Frame) を使用して、これらのメッセージをカプセル化して送信します。

  4. データフレーム(Frame): WebSocketのデータ送信はフレームの概念に基づいています。各データフレームは、フレームヘッダーとペイロード(Payload)で構成されます。フレーム ヘッダーには、いくつかの制御ビットとデータ長情報が含まれています。ペイロードはメッセージの内容です。データ フレームには、テキスト フレーム (UTF-8 でエンコードされたテキスト メッセージ) またはバイナリ フレーム (任意のバイナリ データ) を使用できます。

  5. 接続を閉じる: 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 アプリケーションでリアルタイム通信を行うための基本的な手順です。

おすすめ

転載: blog.csdn.net/gs12software/article/details/131300245