5

SignalRはクライアントの切断をどのように処理しますか?私が次のように述べれば私は正しいですか?

  • SignalRは、Javascriptイベント処理を介してブラウザページのクローズ/リフレッシュを検出し、適切なパケットをサーバーに送信します(永続的な接続を介して)。
  • SignalRは、ブラウザのクローズ/ネットワーク障害を検出しません(おそらくタイムアウトによってのみ)。

ロングポーリング輸送を目指しています。

私はこの質問を知っていますが、私にとって少し明確にしたいと思います。

4

2 に答える 2

9

ユーザーがページを更新すると、それは新しい接続として扱われます。切断がタイムアウトに基づいていることは正しいです。

SignalR.Hubs.IConnectedおよびを実装することにより、ハブで接続/再接続および切断イベントを処理できますSignalR.Hubs.IDisconnect

上記はSignalR0.5.xを参照しています。

公式ドキュメント(現在v1.1.3の場合)から:

public class ContosoChatHub : Hub
{
    public override Task OnConnected()
    {
        // Add your own code here.
        // For example: in a chat application, record the association between
        // the current connection ID and user name, and mark the user as online.
        // After the code in this method completes, the client is informed that
        // the connection is established; for example, in a JavaScript client,
        // the start().done callback is executed.
        return base.OnConnected();
    }

    public override Task OnDisconnected()
    {
        // Add your own code here.
        // For example: in a chat application, mark the user as offline, 
        // delete the association between the current connection id and user name.
        return base.OnDisconnected();
    }

    public override Task OnReconnected()
    {
        // Add your own code here.
        // For example: in a chat application, you might have marked the
        // user as offline after a period of inactivity; in that case 
        // mark the user as online again.
        return base.OnReconnected();
    }
}
于 2012-03-22T14:03:39.140 に答える
6

SignalR 1.0では、SignalR.Hubs.IConnectedとSignalR.Hubs.IDisconnectは実装されなくなり、ハブ自体のオーバーライドになりました。

public class Chat : Hub
{
    public override Task OnConnected()
    {
        return base.OnConnected();
    }

    public override Task OnDisconnected()
    {
        return base.OnDisconnected();
    }

    public override Task OnReconnected()
    {
        return base.OnReconnected();
    }
}
于 2013-02-21T10:56:43.897 に答える