【问题标题】:How to achieve realtime synchronization between my own back-end and my mobile app?如何实现我自己的后端和我的移动应用程序之间的实时同步?
【发布时间】:2023-04-03 04:15:02
【问题描述】:

我有点嫉妒像 Google Cloud Firestore 这样实现移动应用(或网络应用)和后端之间实时同步的服务。这让我将普通的 HTTP GET 后端视为史前时代。

我想知道,在 2O19 年,是否存在非常简单/可扩展的解决方案/框架来在我自己的后端实现这一目标。 我听说过套接字,但它看起来很昂贵且很难设置(也许我错了)。也许是无声通知? (但它再次增加了管理的复杂性,我们不能 100% 相信每个通知都会达到其目标)。

我知道冲突是最敏感的话题,所以即使是只读解决方案(只有后端可以修改实体)也会很棒。

【问题讨论】:

  • 您想在自己的后端构建 Firebase 所做的事情吗?
  • 您必须使用 Socket.IO 并使用套接字编程建立后端和应用程序的通信。通过这种方式,您可以创建实时发生的事情。

标签: google-cloud-firestore synchronization real-time-updates


【解决方案1】:

有实时同步数据的解决方案。他们中的大多数使用 WebSockets 或 SSE(服务器端事件)进行传输,这也适用于 Google Cloud Firestore。许多现有的解决方案都是具有同步功能的数据库,就像 Firestore。但也有其他选择。

现有解决方案

假设您不是在寻找推送解决方案,例如 PubNubPusher,而是在寻找数据的无缝同步,那么我可以提几个来帮助您入门:

使用 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!
   });
});

注意事项

上面提到的所有解决方案(对于那些寻求解决方案的人来说还有更多)在以下领域各有优缺点:

  • 弹性 - 处理丢失的消息和连接
  • 访问控制 - 授予和撤销订阅的访问权限
  • 实时查询 - 获取实时更新的部分或过滤数据
  • 离线支持 - 离线处理数据
  • 缩放
  • 数据库要求
  • 使用简单

只需环顾四周,看看哪种解决方案最适合您的需求。

【讨论】:

    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多