Javaバックエンドからどのようにしてメッセージをフロントエンドにプッシュできますか?

WebSocketを利用して、Javaのバックエンドからフロントエンドにメッセージを送信できます。WebSocketは、単一のTCP接続上で全二重通信を行うプロトコルであり、サーバー側がクライアント側に積極的にメッセージを送信できます。

WebSocket の機能を実現するには、Java API for WebSocket (javax.websocket) を使用できます。以下に簡単な例を示します。

  1. javax.websocket.Endpoint
  2. オンオープン
  3. 終了時
  4. エラーが発生しました
  5. メッセージの受信時
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/websocket")
public class MyWebSocketEndpoint {

    @OnOpen
    public void onOpen(Session session) {
        // 在客户端连接时执行的操作
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        // 在客户端关闭连接时执行的操作
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
        // 在发生错误时执行的操作
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        // 接收到客户端发送的消息时执行的操作
    }
}
  1. javax.websocket.server.ServerApplicationConfig
  2. アノテートされたエンドポイントクラスを取得する
import java.util.Set;
import javax.websocket.Endpoint;
import javax.websocket.server.ServerApplicationConfig;
import javax.websocket.server.ServerEndpointConfig;

public class WebSocketConfig implements ServerApplicationConfig {

    @Override
    public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {
        return scanned;
    }

    @Override
    public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> scanned) {
        return null;
    }
}
  1. 最終的にはWeb.xmlファイルにWebSocketのサーブレットとサーブレットマッピングを設定します。例えば、
<servlet>
    <servlet-name>javax.websocket.server.ServletContainer</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.example.WebSocketConfig</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>javax.websocket.server.ServletContainer</servlet-name>
    <url-pattern>/websocket/*</url-pattern>
</servlet-mapping>

Java のバックエンドからセッション・オブジェクトの getBasicRemote().sendText() メソッドを呼び出すことで、フロントエンドにメッセージをプッシュ出来るようになりました。たとえば、onOpen メソッドの中でセッション・オブジェクトを格納し、メッセージをプッシュする必要があるときに session.getBasicRemote().sendText(“message”) メソッドを呼び出します。

フロントエンドでは、Javaバックエンドからプッシュされるメッセージを受信するために WebSoket API を使用します。たとえば、JavaScript では、new WebSocket(url) で WebSocket インスタンスを作成し、onmessage イベントをリッスンしてメッセージを受信できます。以下に例を示します。

var socket = new WebSocket("ws://localhost:8080/websocket");
socket.onmessage = function(event) {
    var message = event.data;
    // 处理接收到的消息
};

WebSocketを使用しフロントエンドにメッセージをプッシュする基本的な手順は以上の通りです。具体的な要望やフレームワークによっては、さらに設定や操作が必要になる場合があります。

bannerAds