[英]Handling races between querying full state via RPC and published deltas
我将要设计一个基于高速公路的系统。 我经常遇到以下模式:
问题如下:
由于高速公路的异步特性,在查询状态和发布更改之间存在潜在的竞争。
在服务器端计算状态后,可能已将更新发送到客户端。 客户端收到完整状态后,它就不再是最新状态。 必须使用先前收到的更新对其进行修补。
不知何故,我觉得这是一个普遍的问题。 关于如何处理这种情况,是否有一些最佳做法?
我正在考虑这样的事情:
这有意义吗? 还是我缺少明显的东西?
我稍微修改了横杠投票示例以显示问题。
查询当前选票的RPC调用被人为地延迟了5秒。 当打开Web应用并在收到状态前提交投票时,一旦处理了投票并收到了更新,不久就可以看到正确的投票计数。
最终,延迟状态到达-并显示过期的投票计数。
干净的解决方案是Crossbar.io中的一个新功能( 尚未记录的功能 :事件保留。
此选项为订阅者提供第一个当前订阅事件之前的单个保留事件。 保留的事件由发布者选择。 如果发布者选择了每个事件,则此功能将为您提供上次发布状态。
在https://github.com/crossbario/autobahn-python/tree/master/examples/twisted/wamp/pubsub/retained中有一个示例
(除了Autobahn | Python之外,不确定是否支持库。)
否则:您可以在通话前使用订阅模式以及使用时间戳。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.