当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring 4在我的webSocket服务器中捕获订阅事件

暨修洁
2023-03-14

我用Spring4、STOMP和sock做了一个简单的web套接字通信。js,接下来呢,https://spring.io/guides/gs/messaging-stomp-websocket/

现在我想升级到简单聊天。我的问题是,当用户订阅新的聊天室时,他应该得到过去的消息。我不知道如何捕捉他订阅发送邮件列表的那一刻。

我尝试使用@MessageMapping注释,但没有成功:

@Controller
public class WebSocketController {

    @Autowired
    private SimpMessagingTemplate messagingTemplate;


    @MessageMapping("/chat/{chatId}")
    public void chat(ChatMessage message, @DestinationVariable String chatId) {
        messagingTemplate.convertAndSend("/chat/" + chatId, new ChatMessage("message: " + message.getText()));
    }

    @SubscribeMapping("/chat")
    public void chatInit() {
        System.out.println("worked");
        int chatId = 1; //for example
        messagingTemplate.convertAndSend("/chat/" + chatId, new ChatMessage("connected"));
    }

}

然后我创造了:

@Controller
public class ApplicationEventObserverController implements ApplicationListener<ApplicationEvent> {
    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        System.out.println(applicationEvent);
    }
}

它工作,但捕捉所有可能的事件,我不认为这是一个好的做法。

所以,我的问题可以重新表述:当用户订阅某项服务时,如何发送初始数据?

共有1个答案

蓝慈
2023-03-14

当客户端使用@SubscribeMapping处理程序方法订阅目标时,您可以直接将任何内容返回给客户端。返回的对象不会发送到代理,而是直接发送到客户端:

@SubscribeMapping("/chat")
public Collection<ChatMessage> chatInit() {
    ...
    return messages;
}

在客户端:

socket.subscribe("/app/chat", function(message) {
    ...
});

查看GitHub上的聊天示例,它显示了这个确切的场景。

 类似资料:
  • 我正在使用mosquitto(http://mosquitto.org/)作为MQTT代理,并寻求关于负载平衡订阅服务器的建议(针对相同的主题)。这是如何实现的?我所读到的关于该协议的所有内容都表明,相同主题的所有订阅者都将获得一条发布消息。 这似乎效率很低,因此我正在寻找一种方法,将发布的消息以循环方式提供给连接的订阅服务器之一,以确保负载平衡状态。

  • Tendermint 会发出不同的事件,您可以通过Websocket订阅这些事件。这对于第三方应用程序(如 analysys)或检查状态非常有用。 事件列表 您可以通过 Websocket 调用 subscribe RPC 方法订阅上面的任何事件。 { "jsonrpc": "2.0", "method": "subscribe", "id": "0", "para

  • 我有一个使用ActiveMQ的JMS生产者/订阅者的简单Spring应用程序,配置如下: 我试过所有可能的解决办法,但没有一个奏效。我们非常感谢任何帮助

  • 我正在调用一个函数,其中有一个订户函数。此函数必须返回一个数组,但它给出了一个错误: 缺少订阅。 如何做到这一点?

  • 我部署服务器发送事件资源与泽西2.41/Java7/tomcat 7. 我得到的错误是 2013年12月16日凌晨4:04:40组织。阿帕奇。卡塔琳娜。果心StandardWrapperValve:Servlet。路径为[/trackapp]的上下文中servlet[ServletAdapter]的服务()引发异常[java.lang.UnsupportedOperationException:s

  • 语境: 给定一个WooCommerce和WooCommerce订阅的WordPress网站,我试图获取特定用户订阅的列表。在最近的更新之前,这一行代码已经为我解决了这个问题。以下是我一直在使用的代码: 其中$user\u id是WordPress中的有效用户id。 问题: 自上次更新以来,我们经常看到以下错误: 致命错误:在/home/warfarep/public_html/wp content