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