如何确定SignalR客户端的服务器断开连接?

Ale*_*ndr 24 javascript long-polling signalr

问题是SignalR JavaScript客户端在与服务器的连接丢失时如何检测?

谢谢你的回复!

Joh*_*ner 29

集线器有一个方法disconnect,允许您在断开连接时添加回调:

myHub.disconnect(function() {
  alert('Server has disconnected');
});
Run Code Online (Sandbox Code Playgroud)

如果您没有使用集线器,那么disconnect方法的代码将帮助您:

$(connection).bind("onDisconnect", function (e, data) {
  callback.call(connection);
});
Run Code Online (Sandbox Code Playgroud)

这显示了挂接到底层连接的onDisconnect事件的语法.

  • 不要使用bind ...只需要连接.disconnected (2认同)

Mat*_*rla 13

如果您使用的是集线器,请实现IDisconnect接口.

public class ChatHub : Hub, IDisconnect
{
    public void Disconnect()
    {
        Debug.WriteLine(Context.ConnectionId + " disconnected");
    }
}
Run Code Online (Sandbox Code Playgroud)

在持久连接上,您可以覆盖OnDisconnectAsync,(来自SignalR wiki,网址https://github.com/SignalR/SignalR/wiki/PersistentConnection)

public class MyEndPoint : PersistentConnection 
{
    protected override Task OnDisconnectAsync(string clientId) 
    {
        return Connection.Broadcast("Client " + clientId + " disconncted");   
    }
}
Run Code Online (Sandbox Code Playgroud)


Ros*_*nes 6

这使用"@aspnet/signalr": "^1.0.0"npm 包对我有用

const connection = new signalr.HubConnectionBuilder()
    .withUrl('url')
    .configureLogging(signalr.LogLevel.Information)
    .build()

connection.onclose(() => {
   // close logic goes here
})
Run Code Online (Sandbox Code Playgroud)


bp7*_*p74 5

从SignalR v0.5.1开始,它以这种方式工作:

$.connection.hub.stateChanged(function (change) {
    if (change.newState === $.signalR.connectionState.reconnecting) {
        console.log("liveFeed is reconnecting!");
    }
    else if (change.newState === $.signalR.connectionState.connected) {
        console.log("liveFeed is connected!");
    }
});
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请访问此网站:

http://weblogs.asp.net/davidfowler/archive/2012/06/10/signalr-0-5-1-released.aspx


小智 5

SignalR 2.0这样做的方式是这样的:

$.connection.hub.disconnected(function () {
    console.log('Connection disconnected')
});
Run Code Online (Sandbox Code Playgroud)

http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#connectionlifetime


Ali*_*eza 2

提供的答案将不再有效。这是停止/断开连接的新方法。

myHub.stop().then(() => {
  alert('Server has disconnected');
});
Run Code Online (Sandbox Code Playgroud)