spring - Spring Websocket 中的 Direct、Group、Channel 需要多少个端点和主题?

标签 spring spring-boot websocket spring-websocket spring-messaging

我想编写在用户之间进行消息传递的应用程序, 用户之间发送的消息有 3 种类型

  1. 直接
  2. channel :仅从管理员发送
  3. 群组

我的应用程序将在 RDBMS 中保存消息。当新消息发送和接收用户在线时,我的应用程序将通知用户收到新消息,我决定使用 Spring Websocket 和 Stomp 编写我的应用程序。我的应用程序使用 Spring Security,并且我想在组中显示在线用户并直接显示彼此成员 我的问题是知道我需要多少个端点和代理?以及如何做到这一点。

更新:

我的应用程序类似于 gitter 和 slack ,当用户登录消息可能从直接或组或 channel 接收时。当我在用户和组或 channel 之间切换时,我将从最后一个取消订阅并订阅我在其中聊天的用户或组。我不知道订阅和取消订阅是否正确,或者只是一个订阅全部。 这种用法正确与否?

chatSocket.subscribe("/user/exchange/direct/chat.message/{userId}", function(message) {});


chatSocket.subscribe("/topic/group/chat.message/{groupId}", function(message) {});

最佳答案

  • 对于私信,请使用用户目标。
  • 对于只能由管理员发送的消息,限制发布给具有该角色的用户,并允许其他用户订阅(使用 Spring Security)
  • 如果您想广播消息,请使用代理目标(如果需要添加一些登录信息,请使用应用程序目标)

存储消息的选项可以是添加 channel 拦截器。让用户在建立 websocket 连接时订阅应用程序目标,并发送在线时发送的存储消息。

这个示例应用程序可以给您一些提示:https://github.com/salmar/spring-websocket-chat

关于spring - Spring Websocket 中的 Direct、Group、Channel 需要多少个端点和主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44707388/

相关文章:

java - 使用Spring Boot配置Kafka的问题

android - 从 Arduino 到 Android 的 Websocket : send integer instead of text

websocket - 打破异常:预期为字符串

java - 如何创建 Websocket Java SE 客户端?

java - Postgresql JPA Hibernate 创建数据库

java - Spring 注入(inject)到 Servlet

hibernate - 在 Hibernate + Spring 中使用自定义验证消息

java - 无法使用 Spring 和 Hibernate 保存表单数据

spring-boot - Couchbase 中的存储桶密码

java - 使用 Spring Boot 作为通用 JAR 和 Gradle 的传递依赖项