web-dev-qa-db-fra.com

Comment envoyer un message personnalisé à un utilisateur personnalisé avec une prise Web à ressort?

Je suis nouveau à printemps websocket . Je souhaite envoyer des modifications de produit aux clients. Pour cela, je veux le faire comme suit: Le client crée une connexion socket et souscrit la destination:

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);

J'ai configuré l'application Spring comme suit:

@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");
    }
}

Maintenant, j'ai besoin de la méthode suivante:

@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.
    }

}

Comment puis-je l'implémenter?

13
Morteza Malvandi

Spring documentation est un bon point de départ pour apprendre les concepts de socket web. Pour l'envoi au client, vous pouvez utiliser SimpMessageSendingOperations .

@Autowired
private SimpMessageSendingOperations messageSendingOperations;

De la méthode du contrôleur, le message peut être envoyé par quelque chose comme ceci:

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