如何计算Web服务客户端的空闲时间

时间:2014-03-19 07:53:35

标签: java cxf

基于apache CXF的soap Web服务客户端使用具有心跳服务的Web服务。如果客户端没有向Web服务发送任何请求10秒钟,则客户端应该向服务器发送心跳请求。我的问题是我们如何计算这个空闲的10秒钟。

2 个答案:

答案 0 :(得分:1)

如果您有单一课程,那么您正在调用Web服务我认为您可以实现如下。

<强> KPHeartBeat.java

public class KPHearBeat {

    private static Timer timer;
    static{
        timer = new Timer();
    }

    public String callWebService(int input){

        timer.cancel();
        System.out.println("calling my webService");
        startTimer();
        System.out.println("Starting timer");
        return "Done";
    }

    private void startTimer() {
        timer.purge();
        timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {

                System.out.println("Calling Heart Beat service");

            }
        }, 10000, 10000);
    }

}

JUNIT类;

public class KPTestTimer {

    @Test
    public void testTimer(){

        KPHearBeat kp = new KPHearBeat();

        kp.callWebService(1);
        try {
            Thread.currentThread().sleep(15000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        kp.callWebService(2);
        try {
            Thread.currentThread().sleep(8000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        kp.callWebService(3);
        try {
            Thread.currentThread().sleep(25000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

如果你有多个方法并且你在代码中的不同位置调用它,那么我认为你可以使用单例类来处理计时器。我不认为拦截器会对你有所帮助。

答案 1 :(得分:0)

我认为这取决于您如何实施客户端。

以下是我的建议:

你可以设置客户端的标志,如果客户端调用服务它可以将标志设置为true,并且你有一个计时器来检查标志并每隔10秒重置一次标志。一旦标志在重置之前为假,客户端就可以向心跳服务发送ping。