學到新東西就記錄一下。也許正好有人需要~~~~~~ 由於需要記錄當前線上用戶,emmmm又是沒做過的。。。 本來想用資料庫的形式,但是想想這麼簡單的功能百度肯定有。遨游一波百度,有所收穫。。。。 雖然老是那麼幾篇文章重覆。。。。 大概就是在用戶登錄時Session記錄下數據,前臺獲取展示。下麵這個文 ...
學到新東西就記錄一下。也許正好有人需要~~~~~~
由於需要記錄當前線上用戶,emmmm又是沒做過的。。。
本來想用資料庫的形式,但是想想這麼簡單的功能百度肯定有。遨游一波百度,有所收穫。。。。
雖然老是那麼幾篇文章重覆。。。。
大概就是在用戶登錄時Session記錄下數據,前臺獲取展示。下麵這個文章感覺蠻好的。
Session方法參考網址:
https://www.cnblogs.com/taobox/p/4466187.html
看文章想起了我項目中有用到SignaIR,這個可以實現聊天室肯定可以知道線上用戶人數。果斷繼續百度得到如下結果。。。。
參考網址 :
https://www.red-gate.com/simple-talk/dotnet/asp-net/tracking-online-users-with-signalr/
SignaIR中有OnConnected,OnConnected,OnDisconnected三個方法,具體實現如下。
public class ChatHub : Hub
{
//當前用戶數量
private static int _userCount = 0;
//存儲用戶信息
private static List<string> list_UserName = new List<string>();
//鏈接
public override Task OnConnected()
{
var username = Context.User.Identity.Name; //獲取用戶的名稱
if (!list_UserName.Contains(username))
{
_userCount++;
list_UserName.Add(username);
}
else
{
list_UserName.Add(username);
}
var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.online(_userCount);//推送全局,也可以推送給指定用戶
return base.OnConnected();
}
//重連
public override Task OnConnected()
{
var username = Context.User.Identity.Name;
if (!list_UserName.Contains(username))
{
_userCount++;
list_UserName.Add(username);
}
else
{
list_UserName.Add(username);
}
var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.online(_userCount);
return base.OnReconnected();
}
//斷開
public override Task OnDisconnected(bool stopCalled)
{
var username = Context.User.Identity.Name;
var count = list_UserName.Where(x => x == username).Count();
if (count == 1)
{
_userCount--;
list_UserName.Remove(username);
}
else
{
list_UserName.Remove(username);
}
var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.online(_userCount);
return base.OnDisconnected(stopCalled);
}
}
JS:
var chat = $.connection.chatHub;
chat.client.online = function (count) {
$("#online").html(count); //標簽賦值
}
$.connection.hub.start();
這樣就能得到有多少用戶鏈接上來,然後我在_Layout.cshtml裡面給控制項賦值,就實現了。
上面做法有一點欠缺,應該可以看到我在list_UserName集合裡面有重覆添加和刪除的動作。
因為無法確認頁面是最後一次關閉(或者是我沒找到)所以才採用這種方法實現。