如何使用 Autobahn Python 和 Twisted Reconnecting ClientFactory 重新注册在重新连接后调用的 WAMP?

How to re-register a WAMP callee after a reconnect using Autobahn Python with Twisted ReconnectingClientFactory?

我有一个使用 Twisted 的 Autobahn Python 客户端应用程序,它连接到 Crossbar.io 服务器。客户端应用程序可以在使用 ReconnectingClientFactory 失去网络连接后成功重新连接。客户端在连接时注册一个被调用者名称,以便其他应用程序可以调用它。这始终适用于初始连接。

但是,当从丢失的连接中恢复时,无法重新注册被叫名称,因为被叫名称仍然是从先前丢失的连接中注册的。这会导致错误 'wamp.error.procedure_already_exists'。因为注册的被叫名字仍然与之前丢失的连接相关联,所以我要注销旧的被叫名字。

我能看到的唯一解决方案是在每个连接上生成并注册一个唯一的新被叫方名称,以避免与之前注册的被叫方名称冲突。

有没有更好或更简单的方法来处理这个问题?似乎 WAMP 协议允许使用注册 ID 从另一个连接中注销被调用者名称,但高速公路 Python 客户端库似乎不允许这样做。

我问错了问题。 Crossbar.io 服务器应该检测客户端何时断开连接,并自动取消注册属于该断开连接会话的被呼叫者(根据 Twitter 上的 Tobias Oberstien:https://twitter.com/oberstet/status/642241167216746496)。这不是高速公路客户的责任。

我的问题是我的 Crossbar.io 服务器没有检测到客户端网络连接突然断开时发生的客户端断开连接,因此没有进行清理。

此行为完全是由于 Crossbar 服务器的配置所致。从那以后,我一直遵循 Crossbar 站点 (http://crossbar.io/docs/WebSocket-Options/) 上记录的 "production settings" 示例。我现在有了我正在寻找的行为,即检测到并自动清除连接断开后遗留的会话。