有实时同步数据的解决方案。他们中的大多数使用 WebSockets 或 SSE(服务器端事件)进行传输,这也适用于 Google Cloud Firestore。许多现有的解决方案都是具有同步功能的数据库,就像 Firestore。但也有其他选择。
现有解决方案
假设您不是在寻找推送解决方案,例如 PubNub 或 Pusher,而是在寻找数据的无缝同步,那么我可以提几个来帮助您入门:
使用 Resgate 的示例
实时 API 网关,例如 Resgate(我是 clearly baised :)),让您可以使用您选择的语言编写(微)服务,就像编写普通的 HTTP Web 服务一样。然后网关在 REST 和实时 API 中公开资源,并保持客户端同步。
使用ResgateIO.Service的C#服务
ResService service = new ResService("example");
service.AddHandler("mymodel", new DynamicHandler()
.SetGet(r => r.Model(new {
message = "Hello, World!",
}))
.SetAccess(r => r.AccessGranted()));
service.Serve("nats://127.0.0.1:4222");
但除此之外,您还可以发送事件以更新和同步所有客户端:
service.With("example.mymodel", r => r.ChangeEvent(new Dictionary<string, object> {
{ "message", "Hello, StackOverflow!" }
}));
然后客户端可以获取数据,并监听更新:
Javascript 客户端使用ResClient
let client = new ResClient('ws://localhost:8080');
client.get('example.mymodel').then(model => {
console.log(model.message); // Hello, World!
model.on('change', () => {
console.log(model.message); // Updated to: Hello, StackOverflow!
});
});
注意事项
上面提到的所有解决方案(对于那些寻求解决方案的人来说还有更多)在以下领域各有优缺点:
- 弹性 - 处理丢失的消息和连接
- 访问控制 - 授予和撤销订阅的访问权限
- 实时查询 - 获取实时更新的部分或过滤数据
- 离线支持 - 离线处理数据
- 缩放
- 数据库要求
- 使用简单
只需环顾四周,看看哪种解决方案最适合您的需求。