定时器对系统资源的消耗大不大?

leonlux 2005-04-03 11:06:41
我想做个c/s系统(类似于IM)。其中服务器和客户端不面向连接,服务器为每个客户端提供一个定时器,客户端定时向服务器发送“在线”消息,服务器更新定时器;若定时器超时,则服务器认为客户端已下线。现在就有一个问题,如果客户端很多的话,那服务器也相应会产生很多个定时器,这样会不会很消耗系统资源?如果是,请问有没有什么好的设计方法或算法,谢谢。
...全文
1054 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jb303 2005-04-09
  • 打赏
  • 举报
回复
应该想办法只用一个定时器,thinking
感觉只需要一个,flyhover(飞翔)的办法也不错啊
niunj 2005-04-09
  • 打赏
  • 举报
回复
可以作成静态的

可以用定时器组建做 也可以用线程中的timer做
thundersoft 2005-04-09
  • 打赏
  • 举报
回复
定时器,mark:)
xiaomatian 2005-04-09
  • 打赏
  • 举报
回复
关注
broadury 2005-04-08
  • 打赏
  • 举报
回复
我认为不是timer本身消耗的资源大不大,而是每次timer触发事件的开销大不大。
只要触发事件的间隔不太小,每次事件触发的开销不太大,应该就可以了。
当然,timer的数量不要太多了
leonlux 2005-04-08
  • 打赏
  • 举报
回复
不能说能象QQ一样,至少百来人在线应该是要可以应付的啊。
__ANDY__WU 2005-04-08
  • 打赏
  • 举报
回复
单单一个定时器应该占不了多少资源吧。主要是看你定时处理的事务所占的资源多不多。还有你定时器的频率。如果在线用户很多的话,系统开销就变成一个很大的问题了。
你是想实现成像QQ一样的吗?
leonlux 2005-04-05
  • 打赏
  • 举报
回复
还有一个问题,定时器到底对系统资源的消耗大不大?
__ANDY__WU 2005-04-04
  • 打赏
  • 举报
回复
没有必要发送下线通知啊,只要检查它的登记时间大于30秒的话就认为该客户端已经下线了。
leonlux 2005-04-03
  • 打赏
  • 举报
回复
to:hwxnhk0326 ,但是如果客户下线,服务器要进行相应的清理操作,所以服务器必须要知道客户端是否已经下线。在正常情况下,客户端下线时会发一个“下线”消息到服务器的。
__ANDY__WU 2005-04-03
  • 打赏
  • 举报
回复
最好,全部通过客户端来完成!
客户端每隔一段时间比如(20秒)发“我在线”的消息给服务器,服务器登记一下接收到消息的时间。
客户端要查看 其他客户端是否在线 的话就查找一下服务器上登记的时间,如果登记时间和当前时间相差30秒则该用户不在线,如果小余30秒则在线!
leonlux 2005-04-03
  • 打赏
  • 举报
回复
to:wolfofsky(风之武) ,一个定时器怎么做?
to: gdami(糖米) ,面相对象和一个客户端用一个定时器有什么矛盾吗?
flyhover 2005-04-03
  • 打赏
  • 举报
回复
up
gdami 2005-04-03
  • 打赏
  • 举报
回复
现在是面向对象编程了。
那用每个客户端一个。
karykwan 2005-04-03
  • 打赏
  • 举报
回复
应该不大,不知QQ是如何做的.像现在统计在线时间...
Abel.Liu 2005-04-03
  • 打赏
  • 举报
回复
使用一个定时器即可完成此任务
lucbesson 2005-04-03
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3897/3897755.xml?temp=.7407953
帮忙顶一下 我结帖
leonlux 2005-04-03
  • 打赏
  • 举报
回复
to:flyhover(飞翔),我曾经想过你的想法,虽然在单线程的环境可以很好运作,但是在多线程环境处理起来就很麻烦。因为正常“上线”,“下线”的事件处理和清理“伪下线”的操作都要使用同一个“用户状态表”,很难做到同步而又不失性能。
gdami 2005-04-03
  • 打赏
  • 举报
回复
flyhover(飞翔) 说得很清楚了。 服务器只要一个定时器。
flyhover 2005-04-03
  • 打赏
  • 举报
回复
即使客户端不发送“下线”消息到服务器(肯定会经常发生),只要服务有一定时器,每30秒检查一遍所有客户端最近一次发“我在线”时间是否小于30秒,大于30秒的客户端就已下线,服务器对其进行下线处理。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧