Man*_*rte 3 stomp websocket spring-boot
我有一台 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() + "!");
}
Run Code Online (Sandbox Code Playgroud)
在 Java WebSocket 客户端中,我的 StompSessionHandler.afterConnected 中有以下内容:
session.subscribe("/topic/greetings", stompFrameHandler)
Run Code Online (Sandbox Code Playgroud)
然后,我可以通过客户端向服务器路径“hello”发送消息来在两者之间进行通信,然后由于客户端订阅了“topic/greetings”,我还可以使用我的 stompFrameHandler 来处理响应。
但我想知道客户端是否可以订阅两个不同的“频道”,所以在 StompSessionHandler.afterConnected 中是这样的:
session.subscribe("/topic/greetings", greetingsFrameHandler)
session.subscribe("/topic/farewell", farewellFrameHandler)
Run Code Online (Sandbox Code Playgroud)
因为我尝试过,只能接收主题/问候的事件,但不能接收主题/告别的事件。我不知道这是否重要,但为了触发告别事件,我对 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;
}
Run Code Online (Sandbox Code Playgroud)
我想知道客户是否可以订阅两个不同的“频道”
是的,这有效。
为了触发告别事件,我对 websocket 服务器进行休息调用
仅仅结合@PostMapping并@SendTo 不能如您所愿。@PostMapping( )的处理程序与处理( )org.springframework.servlet.*的处理程序不同,并且不以任何特殊方式处理注释。@MessageMappingorg.springframework.messaging.*@SendTo
您可能想使用SimpMessagingTemplate显式发送消息:How to call @SendTo from Normal Request Call ie @RequestMapping
| 归档时间: |
|
| 查看次数: |
3867 次 |
| 最近记录: |