我正在开发一个 websocket 应用程序,我试图让一个 websocket 提供信息,然后输出给端点的订阅者。我已经弄清楚了,但我想知道是否有办法查看订阅了哪些订阅者以及订阅了什么路径?
这是我正在处理的代码示例。
@Autowired
private SimpMessagingTemplate template;
@MessageMapping("/{companyId}/{departmentId}")
@SendTo("/{companyId}/{departmentId}")
public void companyInformation(@DestinationVariable String companyId, @DestinationVariable String departmentId, CompanyMessage companyMessage){
String destination = "/" + companyId + "/" + departmentId;
template.convertAndSend(
destination, processCompanyMessage(companyMessage, departmentId));
}
这个想法是信息海报发送companyMessage
反对@MessageMapping
端点,即companyId
and departmentId
从此映射中检索。
然后根据以下内容处理该消息departmentId
是并且已发布到拥有活跃订阅者的每个部门@SendTo
path.
e.g.
有 3 个 websocket 订阅者,/smallCompany/booking
, /smallCompany/sales
, /smallCompany/inventory
.
@MessageMapping
收到一条消息/smallCompany/sales
。该方法基于departmentId
并向每个订阅者发布相同的内容/{companyId}
,即使/{departmentId}
不同。
如果这可能的话,任何想法,如果不可能,任何推动我朝正确方向发展的想法都会很棒。
我知道现在回答已经太晚了!但我现在看到这个问题了!
因此,为了指导其他人看到这个问题,我应该说:
您有几种解决方案:
1-Simp用户注册表:
@Autowired private SimpUserRegistry simpUserRegistry;
public Set<SimpUser> getUsers() {
return simpUserRegistry.getUsers();
}
检查此链接:有 Spring WebSocketSession 存储库吗? https://stackoverflow.com/questions/35729013/is-there-a-spring-websocketsession-repository
2- 全局列表:
您肯定已经在 Spring Boot 中配置了 Web 套接字,因此,您可能有一个来自 WebSocketMessageBrokerConfigurer 的派生类,并覆盖 configureClientInboundChannel 来调用 setInterceptors...
您应该实现从 ChannelInterceptorAdapter 派生的自定义拦截器并重写 preSend 以访问 MessageHeaderAccessor.getAccessor(...).command
这些命令在 StompCommand 中定义(CONNECT、DISCONNECT、SUBSCRIBE、UNSUBSCRIBE,...)
通过使用 StompCommand.SUBSCRIBE/UNSUBSCRIBE 检查 accessor.command,您可以创建并同步订阅者的全局静态列表,并在您需要的任何地方使用它。
3-其他解决方案:
检查此链接:
如何使用 Spring 4 在我的 webSocket 服务器中捕获订阅事件 https://stackoverflow.com/questions/27818269/how-to-capture-subscribe-event-in-my-websocket-server-with-spring-4/27836885
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)