Design patterns 高速公路pubsub中获取初始值的设计模式

Design patterns 高速公路pubsub中获取初始值的设计模式,design-patterns,websocket,publish-subscribe,autobahn,Design Patterns,Websocket,Publish Subscribe,Autobahn,通常,发布-订阅模式是获取内容更新。但订阅者如何获得订阅更新之前的初始内容呢 我在我的应用程序框架中使用发布-订阅示例。发布者后端在关节移动时发布机器人关节的位置。客户端前端有时会在稍后订阅该主题。由于数据的性质,客户机上主题的初始值与发布者进行的后续更新一样重要。因此,在成功建立连接之后,我想获取主题的当前值 框架中是否存在某种类型的设计模式,我可以利用它来获取当前值—订阅之前的值?我可以想出某种单独的RPC服务来获取它,但它似乎将通过一个单独的传递通道。理想情况下,我希望出版商注意到我只是订

通常,发布-订阅模式是获取内容更新。但订阅者如何获得订阅更新之前的初始内容呢

我在我的应用程序框架中使用发布-订阅示例。发布者后端在关节移动时发布机器人关节的位置。客户端前端有时会在稍后订阅该主题。由于数据的性质,客户机上主题的初始值与发布者进行的后续更新一样重要。因此,在成功建立连接之后,我想获取主题的当前值

框架中是否存在某种类型的设计模式,我可以利用它来获取当前值—订阅之前的值?我可以想出某种单独的RPC服务来获取它,但它似乎将通过一个单独的传递通道。理想情况下,我希望出版商注意到我只是订阅了,并将初始值推送到了个人客户端,或者类似的东西,但这可能要求太多,或者不是吗

理想情况下,我希望发布者注意到我刚刚订阅并将初始值推送到单个客户端

这是一个非常好的用例和期望的行为。。事实上,它在WAMP高级配置文件的功能列表中:


这似乎已经足够清楚地定义了,并且在路由器中实现起来并不特别困难。。但它需要路由核心中的代码。

一个更简单的选择:为您的主题创建一个始终订阅的DB前端订户组件,存储主题值的时间序列。前端客户机查询数据库并提取您需要的任何预订阅主题值。您现在有了初始值和当前实时订阅值

我认为在路由器中提供这种功能是过分的。只要让您的DB成为订阅者,并将预订阅获取逻辑挂接到订阅者组件。确保它将DB作为交换点放入,但仅在历史非实时上,并且正如功能列表所描述的,如果DB订户没有记录预订阅值,则路由器必须。还可以防止路由器看起来/感觉像持久性存储,这不是它的工作

编辑: Kraken基本上做到了这一点:它从数据库中提取最后一点主题更改,并在每次新订阅时同步历史和实时

。 应用程序使用Kraken通过主题发送和接收消息。这些消息通常只包含足够的信息来标识在消息发布之前由客户端更改的数据集。当其他客户机收到这些消息时,他们将确定哪些数据已更改,并从数据存储中重新加载,以便最终更新这些数据


至少crossbar现在可以在订阅时检索最新发布的值

您需要启用内存中的事件历史记录和请求保留的事件

在这里,您可以找到autobahn python的示例: