我用SignalR version 2.2.1
创建了聊天应用程序,我想创建有关用户状态的信息 - 这意味着在线/离线状态。
我尝试过使用这个方法:
public override Task OnConnected()
{
var token = Context.QueryString["token"];
if (string.IsNullOrEmpty(token)) return Task.FromResult(0);
using (var dbContext = new AppDbContext())
{
dbContext.UserConnections.Add(new UserConnection { ConnectionKey = Context.ConnectionId, UserId = token.GetUserId() });
dbContext.SaveChanges();
}
Clients.Others.UserConnected(token.GetUserId());
return Task.FromResult(0);
}
public override Task OnDisconnected(bool stopCalled)
{
using (var dbContext = new AppDbContext())
{
var connection = dbContext.UserConnections.First(x => x.ConnectionKey == Context.ConnectionId);
var userId = connection.UserId;
if (connection == null) return Task.FromResult(0);
dbContext.UserConnections.Remove(connection);
dbContext.SaveChanges();
}
Clients.Others.UserDisconnected(userId);
return Task.FromResult(0);
}
我不知道如何正确使用客户端上的disconnect方法 - 因为当用户自动刷新浏览器被称为带有参数OnDisconnected
的{{1}}事件时 - 我现在可以发送一些信息关于断开此用户并将图标设置为脱机但立即再次进行用户连接,图标设置为在线状态,用户体验很奇怪。
如何管理javascript客户端上的断开连接状态而不闪烁在线/离线状态特别是刷新页面?