根据这样的需求,我们就定义个管理用户的系统类,它具有用户ID,用户名,开始时间,最后操作时间,最后操作网址,用户类型,在线时间,还有IP。定义完后,我们就需要定义一个来存储这些信息的集合。系统里是定义一个缓存辞典来存储这些信息。一共定义了2个辞典和一个双向链表。第一个是 Dictionary<string, LinkedListNode<TValue>> _MemberUserList;用来存储所有的会员信息。Dictionary<TKey, LinkedListNode<TValue>> _AllUserList;定义所有的信息,包括会员和游客。在定义一个 LinkedList<TValue> _TValueLink;双向链表进行排序。因为,我们要对链表进行增删改,来达到不断维护在线链表的功能,因此,必须定义一个锁,来限制同一个时间只能对在线列表进行读或者写操作,因此系统中定义了一个 protected ReaderWriterLock _CacheDataRwl = new ReaderWriterLock();锁。接下来就是要定义一个时间,前一篇我已经提到过的system.time.timer类来时间,让它根据指定的时间不断的触发事件。这里的事件就是不断的清除那些已经过期的用户。当然这个类的功能还不限于此,既然可以删除过期用户,当然要具有可以添加新的用户,和更新新的用户的功能。因此,这个类中重载了多种删除的方法。可以根据用户给定的键值也就是key来删除,也可以通过name属性来删除,因此这里要求,name和key一样都具有唯一性。不过在删除和增加的时候都要加锁。判断用户是否长时间都没有操作的方法很简单,只要把用户最后操作时间和当前时间进行判断,如果操作系统指定时间则说明超时,当然,这样也要求用户每访问一个页面的时候都要更新最后操作的时间。
当然也可以把用户信息存在表中,其实方法大同小异,一个是放在内存中,一个放在数据库中,一个访问快点但是占用内存,另外一个速度慢点每次都要去连接数据库,但是可以存储大量的数据,因此可以满足有大量用户在线的需求。