如果用户导航到我以外的其他网站或点击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)));
};
}
答案 0 :(得分:0)
根据这篇文章: http://www.asp.net/signalr/overview/signalr-20/hubs-api/handling-connection-lifetime-events
服务器将等待,直到断开超时时间已过,然后触发OnDisconnected事件。提供的方案是客户端计算机崩溃或进入睡眠模式,因此关闭浏览器的用户将是相同类型的结果。