我的应用程序出了问题 - 我正在尝试通过监听内部请求来实现长轮询,并在下面获得这段代码。
我遇到的问题是它只在来自一个客户端(移动设备)的5个请求之后才会阻塞,在60秒后释放,这似乎是默认的会话超时。它可以从不同的客户端正常工作,但同样只有5个请求。
我该如何解决这个问题?
@RequestMapping(value = "/poll/{id}/{prop}", method = RequestMethod.POST)
public @ResponseBody
Response poll(@PathVariable Long id, @PathVariable String prop){
GameWrapper gameWrapper = GameRegistry.getById(id);
PollRequest request = new PollRequest(gameWrapper, prop);
request.listen();
while(true){
if(request.isCompleted()){
return new SimpleObjectResponse(
SimpleObjectResponse.STATUS_SUCCESS,
gameWrapper.getGame()
);
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
编辑:我添加了整个方法,希望有所帮助。 PollRequest是一个简单的监听器,它通过单独的请求监视GameWrapper的属性。当它检测到时,它将自己设置为“已完成”
编辑:我正在使用Tomcat 7和Spring MVC 3,我也试过在Jetty上运行它并在Play Framework中重新实现,同样的事情。我在Tomcat中增加了线程数,但这没有任何区别。