web-dev-qa-db-ja.com

SignalRクライアントからのサーバー切断を判別する方法は?

問題は、サーバーとの接続が失われたときにSignalR JavaScriptクライアントがどのように検出できるかです。

返信ありがとう!

25
Alexandr

ハブにはメソッドdisconnectがあり、切断が発生したときにコールバックを追加できます。

myHub.disconnect(function() {
  alert('Server has disconnected');
});

ハブを使用していない場合は、disconnectメソッドのコードが役立ちます。

$(connection).bind("onDisconnect", function (e, data) {
  callback.call(connection);
});

これは、基になる接続のonDisconnectイベントにフックするための構文を示しています。

29
John Rayner

ハブを使用している場合は、IDisconnectインターフェイスを実装します。

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

永続的な接続では、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");   
    }
}
13
MatteKarla

これは"@aspnet/signalr": "^1.0.0" npmパッケージ

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

connection.onclose(() => {
   // close logic goes here
})
6
Ross Jones

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!");
    }
});

詳細については、このWebサイトを確認してください。

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

6
bp74

これを行うためのSignalR 2.0の方法は次のとおりです。

$.connection.hub.disconnected(function () {
    console.log('Connection disconnected')
});

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

5
gholmes

以下は、私のために働きました:

var connection = $.hubConnection('signalrConnectionUrl');

connection.disconnected(function() {
    console.log('Connection disconnected');
});

次のバージョンを使用しています:2.1.2

参考のために次のリンクを参照してください: Link

3
martinmose