spring 有没有办法从常规方法发送 websocket 消息
Is there a way to send websocket message from regular method in spring
我正在构建 Web 应用程序。提供了管理员和用户角色。当用户进行某些操作时,管理员会收到一条消息,表明发生了一些事情。用户登录时建立 Websocket 连接。有没有办法不为用户创建 ws 连接,只使用 HHTP 协议发送消息,只从控制器方法发送 WS 消息?
现在我有这些设置:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOriginPatterns("*").withSockJS();
}
}
@Controller
public class NotificationController {
@MessageMapping("/notification")
@SendTo("/topic/test")
public Notification getNotification(Notification notification) {
return notification;
}
}
是的,这是可能的。
您必须使用 @Autowire
或构造函数注入 SimpleMessagintTemplate。
private final SimpMessagingTemplate simpMessagingTemplate;
public ConstructorName(SimpMessagingTemplate simpMessagingTemplate){
this.simpMessagingTemplate = simpMessagingTemplate;
}
在您的控制器中,或您要向客户端发送消息的函数中,使用 convertAndSendToUser
函数。
simpMessagingTemplate.convertAndSendToUser("userId","/private", messageData);
在 javascript 客户端。
var Sock = new SockJS('http://localhost:8080/ws');
stompClient = over(Sock);
stompClient.connect({}, onConnected, onError);
stompClient.subscribe('/topic/' + userId + '/private', onMessageReceived);
我正在构建 Web 应用程序。提供了管理员和用户角色。当用户进行某些操作时,管理员会收到一条消息,表明发生了一些事情。用户登录时建立 Websocket 连接。有没有办法不为用户创建 ws 连接,只使用 HHTP 协议发送消息,只从控制器方法发送 WS 消息?
现在我有这些设置:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOriginPatterns("*").withSockJS();
}
}
@Controller
public class NotificationController {
@MessageMapping("/notification")
@SendTo("/topic/test")
public Notification getNotification(Notification notification) {
return notification;
}
}
是的,这是可能的。
您必须使用 @Autowire
或构造函数注入 SimpleMessagintTemplate。
private final SimpMessagingTemplate simpMessagingTemplate;
public ConstructorName(SimpMessagingTemplate simpMessagingTemplate){
this.simpMessagingTemplate = simpMessagingTemplate;
}
在您的控制器中,或您要向客户端发送消息的函数中,使用 convertAndSendToUser
函数。
simpMessagingTemplate.convertAndSendToUser("userId","/private", messageData);
在 javascript 客户端。
var Sock = new SockJS('http://localhost:8080/ws');
stompClient = over(Sock);
stompClient.connect({}, onConnected, onError);
stompClient.subscribe('/topic/' + userId + '/private', onMessageReceived);