web-dev-qa-db-ja.com

Spring WebSocketを使用してカスタムユーザーにカスタムメッセージを送信するにはどうすればよいですか?

spring websocket は初めてです。製品の変更をクライアントに送信したい。これを行うには、次のようにします。クライアントがソケット接続を作成し、宛先をサブスクライブします。

var socket = new SockJS('/websocket');
var stompClient = Stomp.over(socket);

stompClient.connect({}, function (frame) {
    stompClient.subscribe('/product/changes', function (scoredata) {
        // We received product changes
    });
});
//Send Ajax request and say server I want to know product with id=5 changes.
sendAjaxRequest(5);

私は春のアプリを次のように設定しました:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/websocket").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/product/");
        registry.setApplicationDestinationPrefixes("/app");
    }
}

今、私は次の方法が必要です:

@RestController
public class ProductController {

    @GetMapping("product-{id}")
    public void startSubscribe(@PathVariable("id") Long id) {

        // register current websocket session with product id and 
        // then with convertAndSendToUser send changes to current user.
    }

}

それを実装するにはどうすればよいですか?

13

Spring documentation は、Webソケットの概念を学ぶための良い出発点です。クライアントへの送信には SimpMessageSendingOperations を使用できます。

@Autowired
private SimpMessageSendingOperations messageSendingOperations;

コントローラメソッドから、次のようなものでメッセージを送信できます:

messageSendingOperations.convertAndSendToUser(websocketUserId, "/product/changes", messageObject);
0
Shah Minul Amin