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