6

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

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

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

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

4

1 回答 1

6

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

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

此行为仅仅是由于 Crossbar 服务器的配置所致。此后,我一直遵循 Crossbar 站点 ( http://crossbar.io/docs/WebSocket-Options/ ) 上记录的“生产设置”示例。我现在有了我正在寻找的行为,其中检测到断开连接留下的会话并自动清理。

于 2015-09-11T16:59:02.693 回答