【问题标题】:Stomp WebSocket subscribe to two different topicsStomp WebSocket 订阅两个不同的主题
【发布时间】: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


    【解决方案1】:

    我想知道客户是否可以订阅两个不同的“频道”

    是的,这行得通。

    为了触发告别事件,我对 websocket 服务器进行了一次休息调用

    只是将@PostMapping@SendTo 结合不起作用如您所愿。 @PostMapping (org.springframework.servlet.*) 的处理程序与处理 @MessageMapping (org.springframework.messaging.*) 的处理程序不同,并且不以任何特殊方式处理 @SendTo 注释。

    您可能希望使用SimpMessagingTemplate 明确发送消息:How to call @SendTo from Normal Request Call i.e @RequestMapping

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 2015-03-12
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多