如果用户离开网站,SignalR会调用OnDisconnected

时间:2013-12-08 00:36:02

标签: c# .net signalr-hub

如果用户导航到我以外的其他网站或点击X按钮完全关闭浏览器,OnDisconnected仍会在一段时间后被调用吗?

我问的原因是因为我需要在用户离开时更新数据库,以便它不会将用户显示为仍在房间内。

- 即使用户已完全关闭浏览器,一段非活动后是否会调用以下函数?

    public override async Task OnDisconnected()
{
    if (!string.IsNullOrEmpty(this.Context.QueryString["acroomid"]))
    {
        string roomid = this.Context.QueryString["acroomid"],
               uid = this.Context.QueryString["uid"],
               isPro = this.Context.QueryString["isPro"];

        await Groups.Remove(Context.ConnectionId, roomid);

        ChatManager.LeaveChatRoom(uint.Parse(roomid), new Guid(Membership.GetUser().ProviderUserKey.ToString()));
        Clients.Group(roomid).gone(new Attendee(Context.ConnectionId, Membership.GetUser().UserName, bool.Parse(isPro)));
    };
}

1 个答案:

答案 0 :(得分:0)

根据这篇文章: http://www.asp.net/signalr/overview/signalr-20/hubs-api/handling-connection-lifetime-events

服务器将等待,直到断开超时时间已过,然后触发OnDisconnected事件。提供的方案是客户端计算机崩溃或进入睡眠模式,因此关闭浏览器的用户将是相同类型的结果。