在5个请求之后,睡眠线程完全阻塞浏览器

时间:2013-12-21 23:54:14

标签: java multithreading spring tomcat threadpool

我的应用程序出了问题 - 我正在尝试通过监听内部请求来实现长轮询,并在下面获得这段代码。

我遇到的问题是它只在来自一个客户端(移动设备)的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中增加了线程数,但这没有任何区别。

0 个答案:

没有答案