【发布时间】:2018-09-11 03:54:41
【问题描述】:
我有一个 websocket 服务器和一个 websocket 客户端,两者都是 Java。 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。
但我想知道客户端是否可以订阅两个不同的“频道”,所以在 StompSessionHandler.afterConnected 中是这样的:
session.subscribe("/topic/greetings", greetingsFrameHandler)
session.subscribe("/topic/farewell", farewellFrameHandler)
因为我试过了,我只能接收来自主题/问候的事件,但不能接收来自主题/告别的事件。我不知道这是否重要,但为了触发告别事件,我对 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;
}
【问题讨论】:
标签: spring-boot websocket stomp