【问题标题】:Signalr firing multiple OnDisconnect calls and the connection is not disconnected eitherSignalr 触发多个 OnDisconnect 调用,并且连接也没有断开
【发布时间】:2017-11-23 02:50:00
【问题描述】:

我们有一个横向扩展(2 个实例)Azure Cloud 部署了基于 asp.net Web API 的 SignalR 集线器服务器,它充当设备及其移动用户之间的桥梁。几乎是一个聊天场景。

我们看到 多个 OnDisconnected 调用了一些连接,尽管这些连接是活动的。基本上,虽然服务器看到多个 OnDisconnected 调用在其自身上触发一个连接,但客户端仍然可以进行调用,并且它继续使用具有相同信号器连接 ID 的同一单个连接。

就好像客户端对服务器上调用的 OnDisconnected 没有影响。 客户端使用 websockets

我们在 OnDisconnected 中进行了一些操作(基本上是跟踪连接),并且因此而变得混乱。我们的代码封装在 try/catch 块中,并让 base.OnDisconnected 运行而不受任何限制。 查看了信号器代码,但无法弄清楚这是怎么可能的。

任何帮助将不胜感激。 我们正在使用:Signalr 2.2.2。

【问题讨论】:

    标签: asp.net-web-api websocket signalr


    【解决方案1】:

    您是否使用某种形式的背板来管理您的状态?如果是这样,看起来您的连接 ID 没有在请求之间同步。即使连接缓慢且无响应但未断开连接,onDisconnect 也会触发,这取决于您使用的超时值。在某些情况下,您将在没有 onDisconnect 被触发的情况下断开连接,onDisconnected 在大多数情况下是最好的情况。如果您需要根据断开连接做一些工作,那么您最好使用轮询策略来确定用户是否仍然连接。

    【讨论】:

    • 我们使用 Redis 作为背板。但是 OnDisconnected 不应该是有保证的一次性通话吗?我们还看到了光谱另一端的行为。即使设备断电也不会断开连接。
    • 不根据信号器文档查看信号器的连接生命周期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多