Spring WebFlux WebSocket – サーバーサイドの実装方法


  1. 依存関係の追加: まず、Spring WebFluxおよびSpring WebSocketの依存関係をプロジェクトに追加する必要があります。これにより、必要なクラスやアノテーションを使用できるようになります。

  2. WebSocketハンドラの作成: 次に、WebSocketハンドラを作成します。これは、クライアントからのWebSocket接続を処理するためのコードです。以下は、簡単なWebSocketハンドラの例です。

import org.springframework.web.reactive.socket.WebSocketHandler;
import org.springframework.web.reactive.socket.WebSocketSession;
import reactor.core.publisher.Mono;
public class MyWebSocketHandler implements WebSocketHandler {
    @Override
    public Mono<Void> handle(WebSocketSession session) {
        // WebSocketセッションの処理を記述する
        return session.send(/* 応答メッセージを送信する処理 */);
    }
}
  1. WebSocketルートの設定: 次に、WebSocketルートを設定します。これは、WebSocketエンドポイントとWebSocketハンドラの間のマッピングを定義するためのコードです。以下は、簡単なWebSocketルートの例です。
import org.springframework.web.reactive.socket.server.RequestUpgradeStrategy;
import org.springframework.web.reactive.socket.server.upgrade.ReactorNettyRequestUpgradeStrategy;
import org.springframework.web.reactive.socket.server.support.WebSocketHandlerAdapter;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myWebSocketHandler(), "/websocket")
                .setAllowedOrigins("*")
                .withSockJS();
    }
    @Bean
    public WebSocketHandler myWebSocketHandler() {
        return new MyWebSocketHandler();
    }
    @Bean
    public WebSocketHandlerAdapter handlerAdapter() {
        return new WebSocketHandlerAdapter(webSocketService());
    }
    @Bean
    public WebSocketService webSocketService() {
        return new HandshakeWebSocketService(new ReactorNettyRequestUpgradeStrategy());
    }
}
  1. WebSocketの使用: 最後に、WebSocketを使用するためのクライアント側のコードを作成します。これにより、クライアントとサーバー間でのリアルタイムな双方向通信が可能になります。以下は、JavaScriptを使用した簡単なクライアント側のコードの例です。
const socket = new WebSocket('ws://localhost:8080/websocket');
socket.onopen = function() {
    console.log('WebSocket connection established.');
};
socket.onmessage = function(event) {
    const message = event.data;
    console.log('Received message:', message);
};
socket.onclose = function(event) {
    console.log('WebSocket connection closed:', event);
};
function sendMessage(message) {
    socket.send(message);
}

以上が、Spring WebFluxを使用してサーバーサイドでWebSocketを実装するための簡単な手順です。これにより、リアルタイムな双方向通信を実現するアプリケーションを開発することができます。