Java Websocket 開発ガイド: クライアントとサーバー間のリアルタイム通信を実現する方法

王林
リリース: 2023-12-02 11:52:06
オリジナル
1002 人が閲覧しました

Java Websocket开发指南:如何实现客户端与服务器端的实时通信

Java Websocket 開発ガイド: クライアントとサーバー間のリアルタイム通信を実装する方法、具体的なコード例が必要です

Web アプリケーションの継続的な開発では、時間的なコミュニケーションはプロジェクトの重要な部分になっています。従来の HTTP プロトコルでは、クライアントがサーバーにリクエストを送信し、レスポンスを受信して​​初めてデータを取得できるため、クライアントは最新のデータを取得するためにサーバーを継続的にポーリングすることになり、パフォーマンスと効率の問題が発生します。 。 WebSocket はこれらの問題を解決するために生まれました。

WebSocket は HTML5 の新しいプロトコルです。双方向通信を提供し、クライアントのポーリング作業を軽減します。クライアントは、サーバーからの応答を待たずに、サーバーにメッセージを直接送信できます。これにより、リアルタイム アプリケーションの開発がより簡単かつ効率的になります。

Java は Web アプリケーション開発で広く使用されている言語であり、Websocket を簡単に実装する方法も提供します。 Java で Websocket を使用する方法は次のとおりです。

最初のステップは、Java の WebSocket API をインポートすることです。これは、Maven 中央リポジトリから行うか、Java EE 7 フレームワークの javax.websocket パッケージの API を使用して行うことができます。

次は、Java EE 7 の javax.websocket パッケージの API を使用して Websocket を実装する例です。

  1. ServerEndpoint アノテーション クラスの作成

Use @WebSocket アノテーションは、このクラスがこのセッションを WebSocket エンドポイントとして使用できることを Java サーバーに伝えるクラスを作成し、このアドレスを WebSocket エンドポイントと照合するための URI を提供します。

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
 
@ServerEndpoint(value = "/websocket")
public class WebSocketExample {
     
    @OnOpen
    public void onOpen(){
        System.out.println("Connection opened");
    }
     
    @OnClose
    public void onClose(){
        System.out.println("Connection closed");
    }
     
    @OnMessage
    public void onMessage(String message){
        System.out.println("Message received: " + message);
    }
}
ログイン後にコピー

WebSocketExample クラスを WebSocket プログラムへの入り口として使用します。上記の例では、Endpoint クラスで @ServerEndpoint アノテーションを使用して、クラスを指定された URI にマップしました。

@OnOpen、@OnMessage、および @OnClose アノテーションはイベントベースであり、WebSocket 接続が開かれ、メッセージが受信され、接続が閉じられるときに呼び出されるメソッドを指定するために使用されます。

取得されたメッセージ文字列は、onMessage コールバック メソッドに直接渡されます。これで、WebSocket サーバー側でエンドポイントが定義されました。

  1. クライアントの作成例
public class WebSocketClientExample extends Endpoint {
 
    public static CountDownLatch latch;
 
    @Override
    public void onOpen(final Session session, EndpointConfig config) {
        System.out.println("Connected");
 
        try {
            session.getBasicRemote().sendText("Hello");
        } catch (IOException ex) {
        }
    }
 
    @Override
    public void onError(final Session session, Throwable t) {
        t.printStackTrace();
    }
}
ログイン後にコピー

WebSocket クライアントは、WebSocket API の一部である javax.websocket.Endpoint を基本クラスとして使用できます。

CountDownLatch を使用して、クライアントがサーバーに接続されているかどうかを判断します。

onOpen() コールバック メソッドで、サーバーに接続し、メッセージを送信しました。

注: この例では、メッセージは session.getBasicRemote().sendText(“Hello”); メソッドを使用して送信されます。 WebSocket API には、メッセージを送信するための別のメソッド、つまり session.getAsyncRemote().sendText("Hello"); があります。違いは、getBasicRemote() メソッドがブロッキングであるのに対し、getAsyncRemote() メソッドはノンブロッキングであることです。 。 の。メッセージを非同期に送信したい場合は、getAsyncRemote() を使用できます。

  1. テスト クラスを作成してアプリケーションを実行する

サーバーとクライアントにサービスを提供し、接続が正常に確立されることを確認するテスト クラスを構築します。アプリケーションを起動し、実行中のアプリケーションが WebSocket サーバーと対話できるようにする必要があります。すべてが正常であれば、開発ツールのコンソールにいくつかのメッセージが表示されるはずです。

import javax.websocket.*;
import java.net.URI;
import java.util.concurrent.CountDownLatch;
 
public class AppRunner {
 
    public static void main(String[] args) throws Exception {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
 
        CountDownLatch latch = new CountDownLatch(1);
 
        container.connectToServer(new WebSocketExample(), new URI("ws://localhost:8080/websocket"));
 
        latch.await();
    }
}
ログイン後にコピー

このテスト コードは、WebSocket クライアントを起動し、localhost:8080 の WebSocket サーバーへの接続を試行します。 CountDownLatch オブジェクトを使用して、いくつかの追加情報とともに接続の成功を待ちます。

テストを実行するときは、Web ブラウザーで http://localhost:8080/websocket と入力し、JavaScript コンソールを開いてメッセージを表示し、JavaScript WebSocket オブジェクトを通じて WebSocket クライアントにメッセージを送信します。

概要:

リアルタイム通信に WebSocket を使用すると、従来の HTTP 定期ポーリングを使用するよりもはるかに効率的です。 Java 言語では、WebSocket API を使用して WebSocket を実装できます。この記事では、WebSocket サーバーとクライアントの Java サンプル プログラムと具体的なコードの実装例を紹介します。

以上がJava Websocket 開発ガイド: クライアントとサーバー間のリアルタイム通信を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!