我想做个c/s系统(类似于IM)。其中服务器和客户端不面向连接,服务器为每个客户端提供一个定时器,客户端定时向服务器发送“在线”消息,服务器更新定时器;若定时器超时,则服务器认为客户端已下线。现在就有一个问题,如果客户端很多的话,那服务器也相应会产生很多个定时器,这样会不会很消耗系统资源?如果是,请问有没有什么好的设计方法或算法,谢谢。

解决方案 »

  1.   

    to:wolfofsky(风之武) ,一个定时器怎么做?
    to: gdami(糖米) ,面相对象和一个客户端用一个定时器有什么矛盾吗?
      

  2.   

    to:hwxnhk0326 ,但是如果客户下线,服务器要进行相应的清理操作,所以服务器必须要知道客户端是否已经下线。在正常情况下,客户端下线时会发一个“下线”消息到服务器的。
      

  3.   

    flyhover(飞翔) 说得很清楚了。 服务器只要一个定时器。 
      

  4.   

    to:flyhover(飞翔),我曾经想过你的想法,虽然在单线程的环境可以很好运作,但是在多线程环境处理起来就很麻烦。因为正常“上线”,“下线”的事件处理和清理“伪下线”的操作都要使用同一个“用户状态表”,很难做到同步而又不失性能。
      

  5.   

    http://community.csdn.net/Expert/topic/3897/3897755.xml?temp=.7407953
    帮忙顶一下 我结帖
      

  6.   

    我认为不是timer本身消耗的资源大不大,而是每次timer触发事件的开销大不大。
    只要触发事件的间隔不太小,每次事件触发的开销不太大,应该就可以了。
    当然,timer的数量不要太多了
      

  7.   

    应该想办法只用一个定时器,thinking
    感觉只需要一个,flyhover(飞翔)的办法也不错啊
      

  8.   

    可以作成静态的   可以用定时器组建做  也可以用线程中的timer做