Stomp WebSocket 订阅两个不同的主题
Stomp WebSocket subscribe to two different topics
我在 Java 中有一个 websocket 服务器和一个 websocket 客户端。 websocket 服务器有这个:
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(final HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
return new Greeting("Hello, " + message.getName() + "!");
}
在 Java WebSocket 客户端中,我的 StompSessionHandler.afterConnected 中有以下内容:
session.subscribe("/topic/greetings", stompFrameHandler)
然后,我可以通过客户端向服务器路径 "hello" 发送消息来在两者之间进行通信,然后由于客户端订阅了 "topic/greetings",我也将处理我的 stompFrameHandler 的响应。
但是我想知道一个客户端是否可以订阅两个不同的"channels",所以在StompSessionHandler.afterConnected中是这样的:
session.subscribe("/topic/greetings", greetingsFrameHandler)
session.subscribe("/topic/farewell", farewellFrameHandler)
因为我试过了,我只能接收来自 topic/greetings 的事件,但不能接收来自 topic/farewell 的事件。我不知道这是否重要,但为了触发告别事件,我对 websocket 服务器进行了休息调用:
@PostMapping(value = "/sendFarewellEvent", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@SendTo("/topic/farewell")
public Farewell farewell(@RequestBody final Farewell farewell) throws Exception {
Thread.sleep(1000); // simulated delay
return farewell;
}
I am wondering if it is possible for a client to subscribe to two different "channels"
是的,行得通。
to trigger a farewell event I make a rest call to the websocket server
仅将 @PostMapping
与 @SendTo
结合使用 并不能如您所愿。 @PostMapping
(org.springframework.servlet.*
) 的处理程序不同于处理 @MessageMapping
(org.springframework.messaging.*
) 的处理程序,并且不以任何特殊方式处理 @SendTo
注释。
您可能希望使用 SimpMessagingTemplate
明确发送消息:
我在 Java 中有一个 websocket 服务器和一个 websocket 客户端。 websocket 服务器有这个:
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(final HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
return new Greeting("Hello, " + message.getName() + "!");
}
在 Java WebSocket 客户端中,我的 StompSessionHandler.afterConnected 中有以下内容:
session.subscribe("/topic/greetings", stompFrameHandler)
然后,我可以通过客户端向服务器路径 "hello" 发送消息来在两者之间进行通信,然后由于客户端订阅了 "topic/greetings",我也将处理我的 stompFrameHandler 的响应。
但是我想知道一个客户端是否可以订阅两个不同的"channels",所以在StompSessionHandler.afterConnected中是这样的:
session.subscribe("/topic/greetings", greetingsFrameHandler)
session.subscribe("/topic/farewell", farewellFrameHandler)
因为我试过了,我只能接收来自 topic/greetings 的事件,但不能接收来自 topic/farewell 的事件。我不知道这是否重要,但为了触发告别事件,我对 websocket 服务器进行了休息调用:
@PostMapping(value = "/sendFarewellEvent", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@SendTo("/topic/farewell")
public Farewell farewell(@RequestBody final Farewell farewell) throws Exception {
Thread.sleep(1000); // simulated delay
return farewell;
}
I am wondering if it is possible for a client to subscribe to two different "channels"
是的,行得通。
to trigger a farewell event I make a rest call to the websocket server
仅将 @PostMapping
与 @SendTo
结合使用 并不能如您所愿。 @PostMapping
(org.springframework.servlet.*
) 的处理程序不同于处理 @MessageMapping
(org.springframework.messaging.*
) 的处理程序,并且不以任何特殊方式处理 @SendTo
注释。
您可能希望使用 SimpMessagingTemplate
明确发送消息: