Javaバックエンドからどのようにしてメッセージをフロントエンドにプッシュできますか?
WebSocketを利用して、Javaのバックエンドからフロントエンドにメッセージを送信できます。WebSocketは、単一のTCP接続上で全二重通信を行うプロトコルであり、サーバー側がクライアント側に積極的にメッセージを送信できます。
WebSocket の機能を実現するには、Java API for WebSocket (javax.websocket) を使用できます。以下に簡単な例を示します。
- javax.websocket.Endpoint
- オンオープン
- 終了時
- エラーが発生しました
- メッセージの受信時
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) {
// 接收到客户端发送的消息时执行的操作
}
}
- javax.websocket.server.ServerApplicationConfig
- アノテートされたエンドポイントクラスを取得する
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;
}
}
- 最終的には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を使用しフロントエンドにメッセージをプッシュする基本的な手順は以上の通りです。具体的な要望やフレームワークによっては、さらに設定や操作が必要になる場合があります。