Java 休眠线程会在5次请求后完全阻止浏览器
我的应用程序有一个问题——我试图通过监听一个内部请求来实现长轮询,并得到下面的这段代码 我遇到的问题是,它只在一个客户端(移动设备)发出5个请求后才会阻塞,在60秒后释放,这似乎是默认的会话超时。它在不同的客户机上运行良好,但同样,只有5个请求 我怎样才能解决这个问题Java 休眠线程会在5次请求后完全阻止浏览器,java,multithreading,spring,tomcat,threadpool,Java,Multithreading,Spring,Tomcat,Threadpool,我的应用程序有一个问题——我试图通过监听一个内部请求来实现长轮询,并得到下面的这段代码 我遇到的问题是,它只在一个客户端(移动设备)发出5个请求后才会阻塞,在60秒后释放,这似乎是默认的会话超时。它在不同的客户机上运行良好,但同样,只有5个请求 我怎样才能解决这个问题 @RequestMapping(value = "/poll/{id}/{prop}", method = RequestMethod.POST) public @ResponseBody Response pol
@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框架中重新实现,同样的事情。我在Tomcat中增加了线程数,但这没有任何区别。没有更多细节,很难回答。我建议您调试应用程序或添加
System.out.println(…)
或其他日志语句,以查看程序挂起的位置。为什么不使用同步?使用异步处理。睡工作线程是你能做的最糟糕的事情。