我写了一个socket程序,server上有多个服务端,server负责一个主程序来管理各个客户端,我按照一个顺序发送信息给客户端,是一个一个发,首先发给第一个客户端1,从信息开始发出的时候我就要开始计时,如果客户端在30秒内没有发送消息给server,那么server就自动的处理,然后继续发送消息给下一个客户端,这里需要使用一个什么技术?timer的话我已经试了,他不会在server的主程序上等待客户端的响应,只是规定多少秒之后执行task,我现在要的是如果在这30秒之内我收到了用户的信息,我就继续给下一个客户端发送信息,超时的话我就默认处理掉,这里涉及到一个性能的问题,希望不需要用while循环等待一个变量来出来,麻烦各位高手指教!!!!

解决方案 »

  1.   

    一个想法:
    Object shareObj = new Object();
    Timer timer;
    /////////////////////
    Thread for send:
    for mem : members
      mem.send(msg)
      synchronized(shareObj){
        timer.schedule()// execute 30 seconds later
        shareObj.wait();
      }
    end//////////////
    Thread receive for mem:
    when mem received, call
      if(!mem.timeout){
        timer.cancel
        synchronized(shareObj){
          shareObj.notify();
        }
      }//////////////
    Timer:
      executeTask(){
        mem.timeout = true;
        timer.cancel
        synchronized(shareObj){
          shareObj.notify();
        }
      }
    在设置和读取member timeout状态的时候最好也加上同步
      

  2.   

    timer应该可以的,设置10秒运行一次,00:00开始执行任务,发给客户端A,记录发布时间,在00:10时检查客户端A有没有返回信息。如果有返回就处理信息,继续发给B客户端。如果到00:30还没返回,也处理,继续发给B客户端。你要记录下,当前被发布的客户端,及发布时间。
      

  3.   

    下一次循环的是他还是要用到timer,但是timer已经退出了,所以出现了一个timer has canceled
    的异常啊
      

  4.   

    http://www.javaeye.com/topic/147353
    看到的一个例子,提供个思路,呵呵