我正在开发一个网络应用。当程序切换频道时,它会向旧频道的服务器发送“关闭”的AJAX请求。当服务器响应时,应用程序只向服务器发送“打开”请求以打开新频道。大多数情况下,这种近等待完成开放等待完成的回合运行速度足够快,但在特殊通道的情况下,关闭时间超过5秒,这是不可接受的。
我为这些频道的“关闭”请求设置了一个短暂超时,然后它返回,但是新的“打开”请求会一直挂起,直到服务器响应旧的“关闭”请求,因此超时只会将问题推迟。
我为长时间关闭设置了一个setTimeout(),所以当我的程序调用“close”时,它会被延迟,而新的“open”会在它之前执行,但它也只是抛出问题,当setTimeout()命中时,会有一个“在后台”的长请求,这会占用浏览器的ajax请求池,运气好的话会导致伪随机AJAX请求挂起。
应用程序对“关闭”请求的结果不感兴趣,因此即使它失败也可以删除它。
执行此类即发即弃的AJAX请求的最佳做法是什么?
(我在Linux上使用Chromium浏览器,但该应用也应该在Firefox上运行。)
答案 0 :(得分:1)
您可以使用servlet 3.0异步功能。您可以立即为您的关闭请求提交响应,并启动新线程以进行进一步的服务器处理。 您可以参考以下链接获取相同的更多信息。 http://www.javaworld.com/article/2077995/java-concurrency/asynchronous-processing-support-in-servlet-3-0.html