gpt4 book ai didi

ruby-on-rails - 客户端服务架构 : keep client in sync with in-memory data sctructure

转载 作者:IT王子 更新时间:2023-10-29 06:14:04 25 4
gpt4 key购买 nike

我有一项服务可以实时更新 redis(快速内存数据存储)中的一组数据。我还有一个连接到此 redis 实例的 rails 应用程序。任务是将设置的内容显示给所有客户端。请注意,根据某些客户的设置,集合中的某些元素不应发送给他们。

我不想在每次更新时都发送整套内容。应该可以只发送差异,我正在选择使用哪种方法。

rails -> 客户端 连接的实现:

  • react - React 听起来很适合维护实时状态。如果我实时更新 Prop ,html 将免费保持最新。
  • actioncable - 最新的 rails 中有一个组件可将 websockets 集成到 rails 应用程序中。

服务 -> redis 设置 -> rails:

  • 我可以使用 pub/sub redis 功能,让写入 redis 集合的服务发送集合中更改/更新/删除的元素,然后仅使用集合本身发送数据发送给新客户,现有客户将通过发布/订阅保持同步。因此,要更新客户端,请执行以下操作:
    1. 服务即将更新集合中的元素
    2. 服务将元素添加到redis中的集合
    3. 服务将元素发送到发布/订阅队列
    4. 订阅发布/订阅队列的 Rails 应用程序接收元素
    5. rails 应用过滤客户端列表以查看哪些客户端应该获得更新(通常是大多数客户端)
    6. rails 应用程序广播新项目,客户端呈现它

除此之外,我还必须实现更改/删除案例。看起来这种方法太复杂和低级了。事物很容易失去同步,并且它们会在内存中重复多次。

  • 而不是 pub/sub 我可以让 Rails 应用程序重复读取 redis 设置内容并计算是否发生任何更改。它应该很便宜,因为 redis 将集合存储在内存中。如果 Rails 应用程序检测到更改,它会将其广播给客户端。尽管如此,必须根据超时检查内存中是否发生了某些变化,感觉还是不对的。

附加信息:客户不会太多,可能有一千个。该集合将每秒更新一次,有时多,有时少。

让客户端与 Redis 中的状态保持同步的最佳方法是什么? react 使用是否合理?这种“差异”模式是否有一些原生的 React 实现?

最佳答案

我有一个同时使用 React 和 ActionCables 的应用程序。

两者配合得很好。认识到 ActionCables 的局限性很重要(它的用户限制基准低于其他类似工具),但如果您不希望有成千上万的用户同时使用它,它也能正常工作。

无论您是否使用 React,我认为 Flux 模式对管理套接字连接的状态大有帮助。 Vanilla Flux 和 Redux 都是很好的伙伴,它们在监听服务器的变化并将信息传播到应用程序的相关区域方面做得非常出色。它们都恰好最适合与 React 一起使用,但实际上您可以将它们与任何前端框架一起使用。

关于ruby-on-rails - 客户端服务架构 : keep client in sync with in-memory data sctructure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39557315/

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