在线列表类一
??? 根據(jù)這樣的需求,我們就定義個管理用戶的系統(tǒng)類,它具有用戶ID,用戶名,開始時間,最后操作時間,最后操作網(wǎng)址,用戶類型,在線時間,還有IP。定義完后,我們就需要定義一個來存儲這些信息的集合。系統(tǒng)里是定義一個緩存辭典來存儲這些信息。一共定義了2個辭典和一個雙向鏈表。第一個是 Dictionary<string, LinkedListNode<TValue>> _MemberUserList;用來存儲所有的會員信息。Dictionary<TKey, LinkedListNode<TValue>> _AllUserList;定義所有的信息,包括會員和游客。在定義一個 LinkedList<TValue> _TValueLink;雙向鏈表進行排序。因為,我們要對鏈表進行增刪改,來達到不斷維護在線鏈表的功能,因此,必須定義一個鎖,來限制同一個時間只能對在線列表進行讀或者寫操作,因此系統(tǒng)中定義了一個 protected ReaderWriterLock _CacheDataRwl = new ReaderWriterLock();鎖。接下來就是要定義一個時間,前一篇我已經(jīng)提到過的system.time.timer類來時間,讓它根據(jù)指定的時間不斷的觸發(fā)事件。這里的事件就是不斷的清除那些已經(jīng)過期的用戶。當然這個類的功能還不限于此,既然可以刪除過期用戶,當然要具有可以添加新的用戶,和更新新的用戶的功能。因此,這個類中重載了多種刪除的方法。可以根據(jù)用戶給定的鍵值也就是key來刪除,也可以通過name屬性來刪除,因此這里要求,name和key一樣都具有唯一性。不過在刪除和增加的時候都要加鎖。判斷用戶是否長時間都沒有操作的方法很簡單,只要把用戶最后操作時間和當前時間進行判斷,如果操作系統(tǒng)指定時間則說明超時,當然,這樣也要求用戶每訪問一個頁面的時候都要更新最后操作的時間。
???? 當然也可以把用戶信息存在表中,其實方法大同小異,一個是放在內(nèi)存中,一個放在數(shù)據(jù)庫中,一個訪問快點但是占用內(nèi)存,另外一個速度慢點每次都要去連接數(shù)據(jù)庫,但是可以存儲大量的數(shù)據(jù),因此可以滿足有大量用戶在線的需求。
轉載于:https://www.cnblogs.com/zgqys1980/archive/2010/08/20/1804795.html
總結
- 上一篇: 修改jquery文件上传插件upload
- 下一篇: CEF编译 执行gn args out\