我有一个注册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/设备序列号/其他唯一信息,那么这就是您需要知道哪些设备当前已启动的全部内容。