所以我使用signalR來讓在線用戶列表。 我以前stopCalled
避免頁面刷新會像斷線,但現在的用戶是永遠不會斷..只有在用戶關閉頁面/標籤後,SignalR纔會打開OnDisconnect
public override Task OnDisconnected(bool stopCalled)
{
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var currentUser = manager.FindByName(Context.User.Identity.Name);
string name = currentUser.NickName;
if (!(stopCalled))
{
var item = users.SingleOrDefault(x => x.Nick == name);
if (item != null)
users.Remove(item);
userNames.Remove(name);
Clients.All.hubReceived(users);
}
return base.OnDisconnected(stopCalled);
}
按鈕點擊時,用戶應該只僅斷(註銷按鈕) 或當他的閉幕該標籤/頁面。 我能做些什麼?
因此,我試圖按照你說的做,但它不工作,因爲回發導致計數下降到0,從列表中刪除,然後再次連接..所以用戶從0閃爍「1」當提神時,這是我的問題:/ –
好的。在這種情況下,也可以使用'OnConnected'和'OnReconnected'中更新的'LastConnected'時間戳。在'OnDisconnected'中,如果計數爲零,則不要刪除用戶。實現一個自動作業,每運行'x分鐘',用'count = 0'和'LastConnected'去除'x分鐘前'的用戶。使用自動作業調度程序來執行此操作,如[FluentScheduler](https://github.com/fluentscheduler/FluentScheduler) –
或者更容易,在刷新當前用戶時添加一點延遲,所以它不會閃爍 –