通常,发布订阅模式是关于获取内容更新的。但是,订阅者如何获得在订阅更新之前存在的初始内容?
我在高速公路框架内为我的应用程序使用发布-订阅示例。当关节移动时,出版商后端发布机器人关节的位置。客户端先订阅主题,有时稍后再订阅。由于数据的性质,客户端上“主题”的初始值与发布者随后进行的更新一样重要。因此,在成功建立连接之后,我想获取主题的“当前”值。
在框架中是否有某种类型的设计模式,我可以利用它来获得“当前”值(订阅之前的值)?我可以想出某种独立的RPC服务来获取它,但它似乎要通过一个单独的传递通道。理想情况下,我希望发行者注意到我只是订阅并将初始值推送给单个客户端或类似的东西,但这可能要求过高,或者不是吗?
发布于 2014-12-26 12:58:39
理想情况下,我希望发行者注意到我只是订阅并将初始值推送给单个客户端。
这是一个非常好的用例和期望的行为。实际上,它在WAMP高级配置文件的特性列表上:https://github.com/tavendo/WAMP/issues/69
这似乎已经有了足够明确的定义,在路由器中也不是很难实现。但是它需要路由核心中的代码。
发布于 2015-01-13 10:13:54
一个更简单的选择:为您的主题创建一个始终被订阅的DB前端订阅服务器组件,存储主题值的时间序列。您的前端客户端查询您的DB,并获取所需的任何预订阅主题值。您现在有了初始值和当前的实时订阅值。
我认为在路由器中提供这个功能是过分的。只需让您的DB成为订阅者,并将预订阅获取逻辑挂接到订阅服务器组件。当然,它将DB作为一个交换点,但只用于历史(非实时),而且正如功能列表所描述的那样,如果DB订阅者没有记录预订前的值,那么路由器就必须这样做。还防止路由器看起来/感觉像一个持久化存储,这不是它的工作。
编辑: Kraken基本上是这样做的:它从DB中提取最后一点主题更改,并在每个新订阅同步上记录历史和实时的内容。
http://asana.github.io/kraken/。应用程序使用Kraken通过主题发送和接收消息。这些消息通常只包含足够的信息,以标识在消息发布之前客户端更改的数据集。当其他客户端接收到这些消息时,他们会发现哪些数据发生了更改,并从数据存储中重新加载数据,以便最终更新这些数据。
发布于 2017-06-20 09:32:37
至少,纵横栏使得现在可以在订阅时检索最新发布的值。
您需要启用内存中的事件历史记录和请求保留事件。
在这里您可以找到一个关于autobahn-python的示例:https://github.com/crossbario/autobahn-python/commit/c8eddd653fe77fc00cbbcfc395f3a1d0be88cd1b。
https://stackoverflow.com/questions/27641630
复制相似问题