gpt4 book ai didi

message-queue - 通过网络实时同步实时数据

转载 作者:行者123 更新时间:2023-12-04 03:35:41 27 4
gpt4 key购买 nike

您如何通过网络在两个进程(例如客户端和服务器)之间实时同步数据?

我在服务器上构建了各种文档/数据集,由客户端下载和显示。下载后,文档会不断更新以保持新鲜。

这似乎是一个简单且常见的概念,但我找不到任何提供这种抽象级别的工具。我什至不确定我在寻找什么。也许有一个类似的概念与可靠的工具支持?也许有一系列不同的工具必须放在一起?以下是我到目前为止所考虑的:

  • 我需要在单跳 (0.5 RTT) 中传播每个更改,这排除了轮询(通常 >10 RTT)和缓存失效技术(1.5 RTT)。
  • 数据复制和简单的通知广播不是一种选择,因为数据太多,变化太多。客户必须能够选择要下载的特定文档并监控更改。
  • 我目前正在使用消息传递模式,它可以完成这项工作,但它毫无希望地没有生产力。它的工作抽象级别太低。它费力、容易出错,并且不能随着应用程序复杂性的增加而很好地扩展。
  • HTTP 和其他类似 RPC 的技术适用于初始获取,但它们鼓励轮询以进行后续同步。在执行反向请求(从数据源到数据消费者)时,可能会有更改通知,但它比消息传递更复杂。
  • 由于协调两个并行连接上的通信所涉及的复杂性以及两个范式之间的阻抗不匹配,将 RPC(用于初始获取)与消息传递(用于更新)相结合被证明是一场噩梦。我需要一些统一的东西。
  • WebSocket 和 Comet 是实现更改通知的流行方法,但它们需要额外的库才能提高效率,而且我不知道有任何适合我的应用程序的库。
  • 消息队列只是在网络上放置一个中介,同时保持基本的消息传递模式。自定义消息过滤器/路由器让我更接近实时文档概念,但我觉得我是在 MQ 之上实现自定义中间件层。

  • 我有很多额外的需求(两端的原生可观察数据结构 API、增量更新、自定义消息过滤器、自定义连接路由、跨平台、健壮性和可扩展性),但在考虑这些需求之前,我需要找到一些工具至少尝试做我需要的事情。出于标准原因,我试图避免使用内部框架 - 成本、上市时间、长期维护以及让开发人员满意。

    最佳答案

    我目前的结论是没有这样的实时文档同步框架。内部解决方案是可行的方法,但许多现有组件可以用作解决方案的一部分。

    在 WebSocket 或任何其他消息传递平台之上分层实时文档逻辑非常简单。服务器只是在启动连接时和每次更改后将文档作为单独的消息发送。必须添加自动重新连接和一些连接监控来处理网络故障。

    两端的序列化是许多现有库针对的一个单独问题。检测服务器端数据结构的变化(需要启动推送)是另一个独立的问题,它有自己的一套模式和工具。增量更新和许多其他问题可以通过中介拦截连接来解决。

    这种方法将以大量内部胶水代码为代价与当前技术一起使用。它可以在标准组件可用时逐渐替换。

    WebSocket 已经包含资源 URI、路由和其他一些不错的功能。 future 可能会出现有用的中介机构和图书馆。具有文本/事件流 MIME 类型的 HTTP 是 WebSocket future 可能的替代方案。 HTTP 的优点是现有工具只需稍加修改即可重用。

    尽管有丰富的工具支持,我已经完全抛弃了将 RPC 拉取与单独的推送 channel 相结合的模式。在 0.5 RTT 中推送所有内容需要推送 channel 使用与拉取 channel 完全相同的技术,即反向 RPC。反向 RPC 就像消息传递一样,只是它引入了冗余返回,丢弃了有用的连接语义,并且很难将内容不可知的中介插入到流中。

    关于message-queue - 通过网络实时同步实时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17797606/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com