flutter - 如何通过 Flux 将对象更改传达给 Sping MongoDB Reactive 中的 Websocket
问题描述
请给一些关于以下内容的提示!
先决条件:
- 副本集类型的 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
,据我了解,有很大的限制 - 仅用于上限集合,这使得它无法使用。
伙计们,非常感谢任何建议和意见!非常感谢您!
解决方案
到目前为止我发现的唯一方法是使用 Spring Data MongoDB 提供的更改流
推荐阅读
- amazon-web-services - 为什么 SQS ARN 的区域和账户 ID 不能为空?
- php - 这个简单的登录安全吗?
- python-3.x - “A”的最长连续运行
- python - 如何收集文件中关键字之间的所有数据行 - 在换行符处开始+结束
- android - 如何在本机反应中删除 SYSTEM_ALERT_WINDOW android 权限
- android - android studio的lib版本出错
- mongodb - 如何从 Mongo Shell 添加模式验证以要求 MongoDB 中的字符串数组?
- hangouts-chat - 是否可以在 Hangouts Chat 中通过 webhook 发送的消息中 @提及机器人?
- awk - 列增量条件
- python - Python http.client 在完全有效的 HTTP 上抛出 BadStatusLine,仅在 1 个系统上。Wireshark 验证