应用程序使用Apache Server作为Web服务器,将Tomcat用作应用程序服务器。
可以从UI触发操作/请求,这可能需要一些时间从服务器返回,因为它执行一些处理,例如从数据库获取数据并对该数据执行计算。此时间取决于数据库中的数据量以及处理的数据持续时间。根据参数,它可能长达30分钟到1小时或2分钟。
除此之外,还有一些其他调用从数据库中获取少量数据并立即返回。
现在,当我有多个,比如4到5个这么长的重拨打服务器,并且它们当前正在运行时,当我拨打一个应该更小并且立即返回的呼叫时,这个呼叫也会挂起,因为它永远不会到达我的控制器。
我无法找到调试此问题或找到解决方案的方法。如果您碰巧知道如何处理这个问题,请告诉我。
我使用的是Spring,c3p0连接池与Hibernate。
答案 0 :(得分:0)
所以我弄清楚应用程序出了什么问题,并考虑分享它,以防有人在某个地方遇到同样的问题。事实证明,应用服务器或Web服务器没有任何问题,从技术上讲,这是浏览器故障。
我发现浏览器只能对域进行有限数量的打开并发调用。在撰写本文时,最新版本的chrome是6.这是所有浏览器为防止DDOS攻击所做的事情。
在我的应用程序中,HTTP调用需要花费大量时间才能返回,直到计算完成多个HTTP调用同时累积,因此,浏览器在第6个并发调用后停止发送任何进一步的调用,感觉就像应用程序没有响应。您可以在SO中阅读浏览器的最大并发呼叫数。
我认为可能的解决方案是轮询或更好的长轮询。我本来会使用WebSockets但是我们需要做很多改变。