我想编写在用户之间进行消息传递的应用程序, 用户之间发送的消息有 3 种类型
- 直接
- channel :仅从管理员发送
- 群组
我的应用程序将在 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/