定时器对系统资源的消耗大不大?
我想做个c/s系统(类似于IM)。其中服务器和客户端不面向连接,服务器为每个客户端提供一个定时器,客户端定时向服务器发送“在线”消息,服务器更新定时器;若定时器超时,则服务器认为客户端已下线。现在就有一个问题,如果客户端很多的话,那服务器也相应会产生很多个定时器,这样会不会很消耗系统资源?如果是,请问有没有什么好的设计方法或算法,谢谢。 问题点数:100、回复次数:20Top
1 楼wolfofsky(风之武)回复于 2005-04-03 11:41:25 得分 10
使用一个定时器即可完成此任务Top
2 楼karykwan(独行者)回复于 2005-04-03 11:44:32 得分 0
应该不大,不知QQ是如何做的.像现在统计在线时间...Top
3 楼gdami(糖米)回复于 2005-04-03 11:46:20 得分 0
现在是面向对象编程了。
那用每个客户端一个。Top
4 楼flyhover(飞翔)回复于 2005-04-03 11:52:17 得分 0
upTop
5 楼leonlux(堂郎)回复于 2005-04-03 12:03:08 得分 0
to:wolfofsky(风之武) ,一个定时器怎么做?
to: gdami(糖米) ,面相对象和一个客户端用一个定时器有什么矛盾吗?Top
6 楼hwxnhk0326(殺殺人,灌灌水)回复于 2005-04-03 12:03:26 得分 45
最好,全部通过客户端来完成!
客户端每隔一段时间比如(20秒)发“我在线”的消息给服务器,服务器登记一下接收到消息的时间。
客户端要查看 其他客户端是否在线 的话就查找一下服务器上登记的时间,如果登记时间和当前时间相差30秒则该用户不在线,如果小余30秒则在线!Top
7 楼leonlux(堂郎)回复于 2005-04-03 12:46:53 得分 0
to:hwxnhk0326 ,但是如果客户下线,服务器要进行相应的清理操作,所以服务器必须要知道客户端是否已经下线。在正常情况下,客户端下线时会发一个“下线”消息到服务器的。Top
8 楼flyhover(飞翔)回复于 2005-04-03 14:10:09 得分 35
即使客户端不发送“下线”消息到服务器(肯定会经常发生),只要服务有一定时器,每30秒检查一遍所有客户端最近一次发“我在线”时间是否小于30秒,大于30秒的客户端就已下线,服务器对其进行下线处理。Top
9 楼gdami(糖米)回复于 2005-04-03 18:10:27 得分 0
flyhover(飞翔) 说得很清楚了。 服务器只要一个定时器。
Top
10 楼leonlux(堂郎)回复于 2005-04-03 21:59:10 得分 0
to:flyhover(飞翔),我曾经想过你的想法,虽然在单线程的环境可以很好运作,但是在多线程环境处理起来就很麻烦。因为正常“上线”,“下线”的事件处理和清理“伪下线”的操作都要使用同一个“用户状态表”,很难做到同步而又不失性能。Top
11 楼lucbesson(女娃哈哈)回复于 2005-04-03 22:28:46 得分 0
http://community.csdn.net/Expert/topic/3897/3897755.xml?temp=.7407953
帮忙顶一下 我结帖Top
12 楼hwxnhk0326(殺殺人,灌灌水)回复于 2005-04-04 11:58:20 得分 0
没有必要发送下线通知啊,只要检查它的登记时间大于30秒的话就认为该客户端已经下线了。Top
13 楼leonlux(堂郎)回复于 2005-04-05 09:28:19 得分 0
还有一个问题,定时器到底对系统资源的消耗大不大?Top
14 楼hwxnhk0326(殺殺人,灌灌水)回复于 2005-04-08 18:55:41 得分 0
单单一个定时器应该占不了多少资源吧。主要是看你定时处理的事务所占的资源多不多。还有你定时器的频率。如果在线用户很多的话,系统开销就变成一个很大的问题了。
你是想实现成像QQ一样的吗?Top
15 楼leonlux(堂郎)回复于 2005-04-08 20:45:19 得分 0
不能说能象QQ一样,至少百来人在线应该是要可以应付的啊。Top
16 楼broadury(marvel)回复于 2005-04-08 20:58:28 得分 10
我认为不是timer本身消耗的资源大不大,而是每次timer触发事件的开销大不大。
只要触发事件的间隔不太小,每次事件触发的开销不太大,应该就可以了。
当然,timer的数量不要太多了Top
17 楼jb303(sleepingboy)回复于 2005-04-09 00:23:35 得分 0
应该想办法只用一个定时器,thinking
感觉只需要一个,flyhover(飞翔)的办法也不错啊Top
18 楼thundersoft(神州春雷)回复于 2005-04-09 11:51:17 得分 0
定时器,mark:)Top
19 楼niunj(南航牛)回复于 2005-04-09 12:00:02 得分 0
可以作成静态的
可以用定时器组建做 也可以用线程中的timer做Top
20 楼xiaomatian(趴趴熊◎%#……※×)回复于 2005-04-09 13:39:36 得分 0
关注Top




