如何通过WAMP/WebSocket提供初始数据和后续事件

如何通过WAMP/WebSocket提供初始数据和后续事件,websocket,synchronization,wamp,rpc,publish-subscribe,Websocket,Synchronization,Wamp,Rpc,Publish Subscribe,我有一个应用程序,需要从中向web客户端发送实时更新 我目前很高兴通过协议使用WebSocket,因为它提供了发布-订阅和RPC方法 现在,我发现在很多情况下,当用户启动应用程序或视图时,我需要向客户端发送初始状态,然后继续发送更新。我使用RPC调用执行第一个,然后通过发布-订阅执行后一个 现在,这迫使我为这两种方法编写服务器端和客户端代码,即使在这两种情况下我基本上都在传递相同的信息 在服务器端,我正在将适当的代码移动到一个公共方法,但我仍然需要处理发送事件和为RPC调用提供入口点的问题: #

我有一个应用程序,需要从中向web客户端发送实时更新

我目前很高兴通过协议使用WebSocket,因为它提供了发布-订阅RPC方法

现在,我发现在很多情况下,当用户启动应用程序或视图时,我需要向客户端发送初始状态,然后继续发送更新。我使用RPC调用执行第一个,然后通过发布-订阅执行后一个

现在,这迫使我为这两种方法编写服务器端和客户端代码,即使在这两种情况下我基本上都在传递相同的信息

在服务器端,我正在将适当的代码移动到一个公共方法,但我仍然需要处理发送事件和为RPC调用提供入口点的问题:

# RPC endpoint for getting mission info
def get_mission_info(self):
    return self.get_mission_info()

# Scheduled or manually called method to send mission info to all users
def publish_mission_info(self):
    self.wamp.publish("UPDATE_INFO", [self.get_mission_info()])

def get_mission_info(self):
    # Here we generate a JSON serializable dict with the info
    return info
您可以想象,客户端(JS或Python)显示了类似的双重性(两种处理程序方法)

问题是:有没有更聪明的方法来处理这个问题,并避免使用样板代码?我可以采用某种方法,也许会自动将每种类型的最后一个事件发送给请求它的客户机,或者是刚刚订阅的客户机?也许是纵横杆水平的

总的来说,我觉得我可以利用这两个通道(pub-sub和RPC)来实现更好的状态同步策略。人们是如何做到的


我的WAMP服务器是,我的客户端库是Python和JS。

获取初始状态和从所有(感兴趣的)客户端接收的更新流中进行更新本质上是两种不同的操作。我看不出有什么办法。我有一个想法:crossbar.io拦截相关事件,保存每个事件的最后一个实例,然后在客户端订阅相应主题后立即将每个事件的最后一个副本发送给客户端如何?WAMP对此有一个问题(),但是,即使实现了,如果每个事件都包含完整状态而不是状态更新,那么这也只适用于您的用例。(满状态=大量不必要的有线通信)这对我的几条消息都有效,但我觉得不够灵活,迫使我的客户处理空的有效负载。然而,我在建议一种不同的方法。