【问题标题】:Why is my disconnect() handler not getting fired in SignalR Client Side JS?为什么我的 disconnect() 处理程序没有在 SignalR 客户端 JS 中被触发?
【发布时间】:2014-05-12 14:59:33
【问题描述】:

我在使用 SignalR 2.0.3 库时看到一些奇怪/意外的行为。

我正在尝试在客户端中挂钩一些回调,但它们似乎没有被解雇。 我真的很想让重新连接、重新连接和断开连接的回调在 JS - 客户端工作。 SignalR 确实连接成功,并且我已经在服务器和客户端之间进行了通信。

这里有几个sn-ps代码:

$.connection.reconnecting = function () {
    alert("reconnecting");
};
$.connection.reconnected = function () {
    alert("We have been reconnected");
};
$.connection.disconnected = function () {
    alert("We are disconnected!");
};

我可以发誓,当我使用 SignalR 1.x 时,我已经触发了这些。 目前,我们使用的是 2.0.3 版本。

我正在运行 2 台机器设置,其中我的服务器应用程序(和集线器)位于 1 台机器上。

以下是我用来重现的步骤:

1) 从第二台机器连接。我在浏览器中查看了网络流量 控制台,看起来还可以。

2) 接下来我断开客户端计算机与网络的连接。在控制台中我看到 SignalR 试图重新连接。 (这是意料之中的)

3) 最终在 N 次重试后,它看起来好像断开了连接。 (我看到最后的重试是“取消” 在控制台输出中。

4) 但是,我的 disconnected() 处理程序没有被调用。

有任何见解或想法如何追踪这一点?

谢谢, 约翰B

【问题讨论】:

    标签: signalr signalr-hub signalr.client


    【解决方案1】:

    使用 SignalR 2.x,您可以像这样注册回调:

    $.connection.hub.reconnecting(function() {
        alert("reconnecting"); 
    });
    
    $.connection.hub.reconnected(function() {
        alert("We have been reconnected"); 
    });
    
    $.connection.hub.disconnected(function() {
        alert("We are disconnected!"); 
    });
    

    您还可以使用$.connection.hub.stateChanged() 添加回调。见documentation

    【讨论】:

    • 我仍然没有像我预期的那样看到这些发射。我正在使用 SignalR 2.0.3。我在带有 IIS 7 的 Windows 7 中运行。似乎正在使用的协议是“ServerSentMessages”。谁能帮我找出这个问题的根本原因?谢谢,JB
    • 我遇到了和 JohnB 一样的问题,注册断开连接的处理程序而不是直接在集线器代理对象上解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多