请教:关于在三层结构中如何控制在线人数的问题,欢迎高手指教 ( 积分: 50 )

  • 主题发起人 主题发起人 fly_123
  • 开始时间 开始时间
F

fly_123

Unregistered / Unconfirmed
GUEST, unregistred user!
基于com+的三层结构,我想在应用系统中控制该系统的使用人数,请问如何控制比较好?我把当前使用数放在数据库中,当登陆一个客户端则加1;当注销一个客户端则减一;
但是我担心因为数据库服务器,或是组件服务的问题,比如突然停掉,这样可能会导致这些数据没有清除;欢迎高手提供一个稳定成熟的解决方案。
 
基于com+的三层结构,我想在应用系统中控制该系统的使用人数,请问如何控制比较好?我把当前使用数放在数据库中,当登陆一个客户端则加1;当注销一个客户端则减一;
但是我担心因为数据库服务器,或是组件服务的问题,比如突然停掉,这样可能会导致这些数据没有清除;欢迎高手提供一个稳定成熟的解决方案。
 
为何一定要写在数据库里?????
 
我们公司的做法:
中间层有个检查局域网内计算机进程的方法,记住进程里是否有exe的文件名,记下总数,当用户登录时调用这个方法,就知道总数是否超过你限定范围;
 
你可以将当前的客户数放在中间层,不要写到数据库中
 
合理的com+应用是无状态的,客户请求完就断开,像web server一样
web server通过一个称为session的状态对象管理连接
客户在登陆时,告诉session,我来了,session给这个客户一把钥匙,客户把它
保存在cookie中。
但session并不知道这个人什么时候离开,所以,它定义了session的默认保留
时间,一般为10分钟,10分钟内,如果这个人没有再来,那就认为他离开了
你可以参照这种方法做,具体如何保存这个session,有多种方法:
可以保存在文件中(定期刷新最后访问时间,超时就删除它),也可以使用一个状态对象,在内存中管理登录用户信息
 
我的服务端就是无状态的,不能存储任何状态。觉得Session的方案比较好,因为Web-Server就是这样做的。但是如何采用定期访问的话,是否导致客户端访问太频繁,而且设置为10分钟也觉得太长了一点。因为我登记客户端一方面是为了登记在线的操作员,另一方面是为了控制同时在线的点数。
另外,问一个常识性的问题,有状态的组件对象,能存储来自多个客户端递增的状态值吗?即假设某有状态组件有一个属性,初始是0,A客户端调用某方法使其增1,B客户端调用某方法使其增1,C客户端访问该属性,问是否是2?
 
1、因为客户端连上服务器时没有客户端的 IP 值的。
如何确定客户端的唯一?如何确认一个客户端是从哪里连上来的?
( 是否要自己重写一下 scktsrvr )
2、那如何处理多于连接数的连接???
如果重写了 scktsrvr 问题就好解决了。超过连接数就断开后面的连接。
但如果没有,那只能返回 为空的 OleVariant
 
楼主好象没有理解我的意思
客户一旦登陆,就认为他在线(给他一把钥匙)
只要他在10分钟内没有访问,或主动申请退出,就认为他离开
极端情况:
你的用户数限制在5人,有5个人登陆后,马上死机
这时候,其他人无法登陆,得等10分钟后

另外,问一个常识性的问题,有状态的组件对象,能存储来自多个客户端递增的状态值吗?即假设某有状态组件有一个属性,初始是0,A客户端调用某方法使其增1,B客户端调用某方法使其增1,C客户端访问该属性,问是否是2?
===============
是的
 
这个问题不只50分,使用中间层来管理“客户端登录信息”,一旦有用户登录,即状态对象真正有状态,我希望组件服务不能自动、甚至连手工也不能关掉相应的com+应用程序。这样我希望能接管到该应用程序的关闭事件,一旦有客户登录时,关闭将会失败,请问如何做到?
备注,我的人数控制在5人,一旦第6人登录,将会登录失败,而不影响先登录的5人使
用。这个我已经实现了
 
谁来点具体的?
 
老大,接口不是有引用计数器吗?,当引用一个客户端则加1;当注销一个客户端则减一;
 
delphi demo中有例子
 
对,使用引用计数器就行了。
 
"这个问题不只50分,使用中间层来管理“客户端登录信息”,一旦有用户登录,即状态对象真正有状态,我希望组件服务不能自动、甚至连手工也不能关掉相应的com+应用程序。这样我希望能接管到该应用程序的关闭事件,一旦有客户登录时,关闭将会失败,请问如何做到?
备注,我的人数控制在5人,一旦第6人登录,将会登录失败,而不影响先登录的5人使
用。这个我已经实现了"
TO fly_123:
我也在研究这个问题
能加你QQ或者MSN么?大家讨论讨论如何??
我的QQ 7140041
MSN RenRandom@msn.com
 
我觉得如果在后一个用户登录上对已经登录的用户进行一次检查,判断是否连接,如果连接人数已满,则提示“已满”,否则去掉已经退出的用户再进行登录
 
笨而絕對可靠辦法: 中間層建一個ip範圍表, 不在此範圍不接受聯接.
 
后退
顶部