WAMP RPC 在不同的设备上以相同的名称运行



我有一个注册RPC函数的程序,例如com.myapp.foo。然后,我在几个独立的设备上运行这个程序,所有设备都连接到同一个路由器。

当我启动第二个设备时,它出现错误,因为 RPC 函数已经注册(wamp.error.procedure_already_exists(。

这是有道理的,因为路由器需要一个唯一的名称才能正确路由过程调用。但就我而言,

我的第一个想法是每个设备都应该生成一个唯一的过程名称(com.myapp.device4.foo(。

  • 但是,那么程序如何生成唯一名称(有没有比循环直到找到唯一名称更复杂的东西(?
  • 此外,更重要的是,调用方如何发现与特定节点关联的过程的名称?例如,呼叫者希望查找所有已启动的设备,然后在每台设备上调用com.myapp.foo

我正在使用python/asyncio和javascript,两者都在 crossbar.io 服务器。

生成唯一名称:

  • 使用设备特有的数据点,例如其 MAC 或序列号。
  • 创建一个足够长的随机字符串,以便实际上排除应用程序中的冲突。

第一种变体的优点是过程 URL 是永久性的,并且易于与设备关联。

发现已注册的过程:

如果您的客户端有权访问它,WAMP 元 API 允许查询现有过程 - 请参阅 http://crossbar.io/docs/Registration-Meta-Events-and-Procedures/

如果您的URL包含设备的MAC/设备序列号/其他唯一信息,那么这就是您需要知道哪些设备当前已启动的全部内容。

最新更新