为什么我的disconnect()处理程序在SignalR Client Side JS中没有被触发?

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

我正试图在客户端挂钩一些回调,他们似乎没有被解雇 . 我真的很想让JS - 客户端的重新连接,重新连接和断开连接的回调 . SignalR连接成功,我在服务器和客户端之间进行通信 .

Here are a couple of code snippets:

$.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台机器设置,我的服务器应用程序(和集线器)在一台机器上 .

Here are the steps I'm using to reproduce:

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

2)接下来,我将客户端计算机与网络断开连接 . 在控制台中,我看到SignalR试图重新连接 . (这是预期的)

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

4)但是,我的disconnected()处理程序不会被调用 .

任何见解或想法如何追踪这个?

谢谢,JohnB

回答(1)

2 years ago

使用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 .