我正在寻找一个例子,如何在java中实现longpoling机制。我很想使用无状态EJB。
我知道类似的东西会起作用:
@WebService(serviceName="mywebservice")
@Stateless
public class MyWebService {
@WebMethod
public String longPoll() {
short ct = 0;
while(someCondition == false && ct < 60) {
sleep(1000); // 1 sec
ct++;
}
if (someCondition)
return "got value";
else
return "";
}
}
不幸的是,我知道这不具备规模。我可以在网络方法中返回而不完成响应并在其他地方完成它吗?
答案 0 :(得分:3)
JAX-WS支持使用异步客户端调用调用Web服务,并支持回调和轮询模型。看看:
答案 1 :(得分:2)
您尝试实施的内容称为服务器推送。 每个网络服务器/应用服务器都有一个线程池,比如用于处理网络请求的10个线程,如果所有这些线程都进入“休眠状态”,那么在其中一个“休眠”存在之前,其他任何网络请求都不会得到服务。一些解决方案是增加这些线程的数量,但随后您将占用更多内存和更多操作系统资源(每个线程成本)。所以,是的,'服务器推送'的实现是不可扩展的。
解决方案: