ホームページ >Java >&#&チュートリアル >Java API開発におけるリアルタイム通信にWebsocketを使用する

Java API開発におけるリアルタイム通信にWebsocketを使用する

WBOY
WBOYオリジナル
2023-06-19 09:02:201546ブラウズ

インターネットの継続的な発展に伴い、Web アプリケーションのリアルタイム要件はますます高くなっています。従来の HTTP プロトコルは、ステートレスな要求/応答通信方式であり、要求と応答が一方向の短期間の接続であるため、リアルタイム通信のニーズを満たすことができません。したがって、リアルタイム通信のニーズを満たすために、Websocket テクノロジーが誕生しました。 Websocket は、クライアントとサーバーが永続的な双方向接続を確立し、通信プロセス中に任意にデータを送信できるようにする、全二重、長時間接続のリアルタイム通信テクノロジです。

Java API (Application Programming Interface) は開発言語として、Websocket を使用してリアルタイム通信を簡単に行うことができます。 Java API は、Websocket 開発をよりシンプルかつ効率的に行うためのいくつかのツール クラスとフレームワークを提供します。この記事では、Java API開発におけるリアルタイム通信にWebsocketを利用する方法を以下の観点から紹介します。

1. Websocket の基本的な使用法

Java API は、Java 言語で Websocket テクノロジをサポートするための JSR-356 標準を提供します。 Java API の Websocket インターフェイスは、Websocket に関連する基本メソッドとイベント処理メソッドを提供し、開発者はこれらのメソッドを使用して独自の Websocket サーバーとクライアントを実装できます。

Java API を使用して Websocket プログラムを開発するには、javax.websocket.server.ServerEndpoint アノテーションと javax.websocket.OnMessage アノテーションが必要です。このうち @ServerEndpoint アノテーションは、WebSocket サービスの URL、エンコード方式 (UTF-8 など)、メッセージ プロセッサ (つまり WebSocketHandler) およびその他の構成情報を指定するために使用されます。 @OnMessage アノテーションは、Websocket サービスがクライアントから送信されたメッセージを受信したときに呼び出される、指定されたタイプのメッセージ処理メソッドを宣言するために使用されます。クライアントがメッセージを送信すると、メッセージは抽出および解析されて、指定されたメッセージ処理メソッドに渡されて処理されます。メッセージ処理メソッドは、Websocket セッション オブジェクトを通じて応答メッセージを送信できます。

以下は簡単なサンプル コードです:

@ServerEndpoint(value = "/test")
public class WebSocketDemo {

    @OnMessage
    public String handleMessage(String message, Session session) {
        System.out.println("Received message: " + message);
        String echoMsg = "Echo from server: " + message;

        // 发送响应消息
        try {
            session.getBasicRemote().sendText(echoMsg);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return echoMsg;
    }
}

上記のコードは、WebSocketDemo という名前の WebSocket プロセッサを定義し、URL "/test" にバインドします。クライアントがメッセージを送信すると、WebSocketDemo の handleMessage メソッドが呼び出され、応答メッセージが送信されます。

2. Spring Boot を使用して Websocket 開発を簡素化する

Spring Boot は Spring フレームワークに基づいた開発フレームワークであり、Websocket も十分にサポートできます。 Spring Boot を使用すると、Websocket テクノロジーを Java API プロジェクトに統合することが容易になり、アプリケーション開発が加速されます。

まず、Spring Boot プロジェクトの pom.xml ファイルに次の依存関係を追加する必要があります。

<dependency> 
   <groupId>org.springframework.boot</groupId> 
   <artifactId>spring-boot-starter-websocket</artifactId> 
</dependency>

次に、Spring Boot アプリケーションで WebSocketHandler クラスを定義する必要があります。 WebSocketHandler クラスは、Spring の WebSocketHandler インターフェイスから継承し、クライアントから送信されたテキスト メッセージを処理するための handleTextMessage() メソッドなどのいくつかの基本メソッドを実装する必要があります。

public class MyHandler extends TextWebSocketHandler {

   @Override
   public void handleTextMessage(WebSocketSession session, TextMessage message) 
           throws InterruptedException, IOException { 

        String payload = message.getPayload(); 

        // 处理消息
        String echoMsg = "Echo from server: " + payload;

        // 发送响应消息
        session.sendMessage(new TextMessage(echoMsg)); 
   } 

}

最後に、構成ファイルに含める必要があります。 Spring Boot アプリケーションの WebSocket を次のように構成します。

@Configuration 
@EnableWebSocket 
public class WebSocketConfig implements WebSocketConfigurer { 

    @Override 
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 

        registry.addHandler(new MyHandler(), "/myHandler").setAllowedOrigins("*"); 
   } 

}

上記のコードでは、MyHandler クラスが URL「/myHandler」にバインドされ、クロスドメイン リクエストを許可するように設定されます。独自の WebSocket ハンドラーを実装したり、URL を変更したり、他の構成オプションを使用したりできます。 Spring Boot を使用すると、Websocket 開発に非常に便利になり、開発プロセスが簡素化されます。

3. Javascript を使用して Websocket クライアントを開発する

Java API を使用して Websocket サーバーを開発する場合、サーバーと通信するための Websocket クライアントを開発する必要があります。 Javascript の WebSocket API を使用すると、WebSocket を簡単に使用して Web アプリケーションにクライアント通信を実装できます。

JavaScript で Websocket を使用するには、まず Websocket オブジェクトを作成し、Websocket サーバーのアドレスを指定する必要があります。

var ws = new WebSocket("ws://localhost:8080/test");

次に、次のコードを使用してメッセージを送信し、応答を受信します。 Websocket サーバーからのメッセージ:

ws.onopen = function() {
   alert("Websocket连接已建立!");
   ws.send("Hello world!");
}; 

ws.onmessage = function(evt) {
   var receivedMsg = evt.data;
   alert("Received message: " + receivedMsg);
   ws.close();
};

上記のコードは、URL ws://localhost:8080/test で Websocket サーバーに接続し、文字列「Hello world!」を含むメッセージを送信します。サーバーはメッセージを処理するときに応答メッセージを送信し、最終的にクライアントは応答メッセージを受信して​​接続を閉じます。

4. Websocket はチャット ルームのようなアプリケーションを実装します

上記の紹介を通じて、Websocket プログラミングに Java API を使用する方法と、WebSocket プログラミングに Java API を使用して通信する方法を理解できたと思います。次に、Websocket を使用して、単純なチャット ルーム アプリケーションを実装してみます。

まず、Java API を使用して Websocket プロセッサを実装し、Websocket クライアントから送信されたメッセージを処理する必要があります。

@ServerEndpoint(value = "/chat/{username}")
public class ChatServer {

    private static Set<Session> clients = Collections.synchronizedSet(new HashSet<>());

    @OnOpen
    public void onOpen(Session session, @PathParam("username") String username) {
        // 将用户加入到聊天室中
        clients.add(session);

        // 广播消息
        broadcast(username, " joined the chat room!");
    }

    @OnMessage
    public void onMessage(String message, Session session, @PathParam("username") String username) {
        // 广播消息
        broadcast(username, ": " + message);
    }

    @OnClose
    public void onClose(Session session, @PathParam("username") String username) {
        // 将用户从聊天室中移除
        clients.remove(session);

        // 广播消息
        broadcast(username, " left the chat room!");
    }

    private static void broadcast(String username, String message) {
        // 向所有用户广播消息
        for (Session client : clients) {
            try {
                client.getBasicRemote().sendText(username + message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

以上代码定义了一个名为 ChatServer 的 Websocket 处理器,绑定到 URL “/chat/{username}”。当客户端连接到聊天室时,ChatServer 的 onOpen 方法将被调用,并将客户端添加到 clients 集合中,然后广播一条 “加入聊天室” 的消息。当客户端在聊天室中发送一条消息时,ChatServer 的 onMessage 方法将被调用,并向聊天室的所有客户端广播一条消息。当客户端离开聊天室时,ChatServer 的 onClose 方法将被调用,并将客户端从 clients 集合中移除,然后广播一条 “离开聊天室” 的消息。

然后,需要使用简单的 HTML 和 Javascript 代码实现一个 Websocket 客户端:

<!DOCTYPE html>
<html>
<head>
   <title>Chat room</title>
</head>
<body>
   <h1>Chat room</h1>
   <div id="messageArea"></div>
   <form>
       <input type="text" id="inputField" onkeydown="return send(event)">
   </form>

   <script>
       var ws = new WebSocket("ws://localhost:8080/chat/"+prompt("Please enter your name:"));

       ws.onmessage = function(evt) {
           var receivedMsg = evt.data;
           var messageArea = document.getElementById("messageArea");
           messageArea.innerHTML += receivedMsg + "<br>";
       };

       function send(event) {
           if (event.keyCode == 13) {
               event.preventDefault();
               var inputField = document.getElementById("inputField")
               ws.send(inputField.value);
               inputField.value = "";
               return false;
           }
       }
   </script>
</body>
</html>

以上代码将会要求用户输入他们的名称,然后使用 Websocket 连接到 ChatServer 上。用户可以在输入框中输入文本并按下回车键进行发送。当接收到来自 ChatServer 的消息时,HTML 页面将在聊天窗口底部添加一条新的消息。

通过使用 Java API 和 Websocket 技术,我们可以方便地实现高效、实时的 Web 应用程序。无论你是在开发聊天室、在线游戏还是其他实时 Web 应用程序,Websocket 都可以是一个很好的选择。现在开始尝试使用 Websocket,构建自己的实时 Web 应用程序吧!

以上がJava API開発におけるリアルタイム通信にWebsocketを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。