请给一些关于以下内容的提示!
先决条件:
- 副本集类型的 Mongo 集群
@EnableReactiveMongoRepositories
已就位,所有存储库都从ReactiveMongoRepository
@EnableWebFluxSecurity
就位,还有一个自定义过滤器用于 Firebase 身份验证- Websocket 连接是通过 SocketIO 类型的客户端(不是 SockJS 客户端)从 Flutter UI 建立的
我有以下流程(以下我用 混淆真实的类名SomeClass
):
- UI 中的 SocketIO 订阅是通过
WebSocketHandler
实现完成的——它基本上从 Mongo 中查询一个给定唯一 ID 的对象(预计只有一项)。处理程序方法的代码非常简单:
@Override
public Mono<Void> handle(org.springframework.web.reactive.socket.WebSocketSession session) {
return session.send(getUserId(session).flatMap(id -> service.findByUserId(id))
.map(item -> wrapResponse(item, session)));
}
服务类中的代码也很简单:
public Mono<SomeClass> findByUserId(String userId){
return repository.findSomeClassByUserId(userId);
}
- 还有一个 REST 端点,我用 PUT 请求调用它来修改 Mongo DB 中的对象。REST 端点的代码也很简单:
@PutMapping("someclass")
public Mono<SomeClass> saveProfile(@RequestBody SomeClass payload){
return service.saveSomeClass(payload);
}
问题是:
- 有什么方法可以通过已经建立的 WebSocket 会话将 REST 调用中所做的更改传达给给定对象?
考虑和假设:
- 我正在考虑更改流 - 但它与 SockJS 一起工作得更好
sendToUser
。说到 SocketIO - 在这种情况下,需要一个活动会话的注册表,这确实使使用反应式风格的利润变得悲惨 @Tailable
,据我了解,有很大的限制 - 仅用于上限集合,这使得它无法使用。
伙计们,非常感谢任何建议和意见!非常感谢您!