基于apache CXF的soap web服务客户端也使用具有心跳服务的web服务。如果客户端在10秒内没有向web服务发送任何请求,则客户端应该向服务器发送心跳请求。我的问题是,我们如何计算这10秒的空闲时间。
发布于 2014-03-19 17:26:23
如果你有一个单独的类,你正在调用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();
}
}
}如果你有多个方法,并且你在代码中的不同地方调用它,那么我认为你可以使用单例类来处理定时器。我不认为拦截器真的能帮到你。
发布于 2014-03-19 17:17:50
我认为这取决于您如何实现客户端。
以下是我的建议:
您可以为客户端设置标志,如果客户端调用服务,它可以将标志设置为true,并且您有一个计时器来检查标志并每隔10秒重新设置标志。一旦标志在时间重置之前为假,客户端就可以向心跳服务发送ping。
https://stackoverflow.com/questions/22499488
复制相似问题