基于Sponsor检测Remoting活动的在线用户

在.Net的通讯中,Remoting是很常用的技术,不过,对于Remoting不熟悉的朋友可能觉得很郁闷,因为它不提供在线用户和连接数的判断,这常常让使用者觉得很难控制自己系统的服务器,也不知道在什么时候拒绝用户的连接。下面介绍一个思路。

下面的说法,只适用于WKO SingleTon和CAO。不调用于SingleCall,因为SingleCall没有状态。

事实上Remoting内部是可以检测到不在线的用户的,对于Remoting来说,他的用户就是对象,即在服务器端的对象。控制这个对象什么时候回收,可以很好地调整服务器的性能。Remoting是通用租约来判断是否回收对象的,如果租约过期了,就可以回收对象,这样可以节约服务器的资源。

在默认情况下,用户一旦与服务器发生了交互(可以是设置属性或调用方法等),对象的生命周期管理ILease就会刷新最近活动时间,也就是说,如果最近活动时间小于0以后,这个对象就是没有用的了。

在很多系统中,都不会限制用户连接系统的时间,也就是说,租约时间应该是无限制的,如果直接设置租约为无限制,则此对象不可能被服务器回收。事实上,也有一个方法可以让服务器设置租约为无限制,那就是使用ISponsor(就是租约主办方),当对象的最近活动时间已经已经过期后,Remoting的内部机制会检查当前对象有没有注册Sponsor,如果注册了,就按Sponsor提供的续约时间来续约。这样,服务器中的对象的ILease,就一直可以保持有效。

在服务器中,记录各个远程对象的生命周期,如果发现对象就清理就可以发现用户已经被清除。

本文只介绍了思路,详细编码需要朋友们学习Remoting。


posted @ 2011-03-31 16:15  天地任我飞翔  Views(182)  Comments(0)    收藏  举报