我想对我的Java webapp进行AJAX调用。 Java webapp将在其他地方进行异步返回调用。然后,作为AJAX请求的结果,将返回该调用的结果。
我的问题的症结是我在等待第二次回电话时我将如何处理HttpRequest?
我是否只是在AJAX处理程序方法中阻塞并等待调用,还是将请求存储在某处并等待回调?我该如何处理错误/超时?
对于那些关心我如何到达这种情况的进一步信息的人:
这是基于XMPP的即时消息系统的一部分。有一个全局支持用户在我们的webapp中的每个页面上显示为一个图标。我还希望显示此用户的存在,所以,我可以使用IM系统在每个用户的每个页面加载上请求此用户,并最终自己使用DDOS。相反,我想让一个用户定期查询webapp的存在并缓存结果。
因此,AJAX调用将发送给服务器,然后服务器将返回缓存的状态或异步查询XMPP服务器。
答案 0 :(得分:0)
您不必阻止并等待AJAX调用。也就是说,不要同步拨打电话。你应该在Java方面做的是找出一种阻止等待响应从异步调用返回的方法(即,找出一种方法来同步同步。性能命中将是第一次调用任何 new 数据。后续调用将触及缓存,所以你应该很好)。您可以为此数据维护缓存,因此可以先检查缓存以查看数据是否存在。如果它没有进行调用并将结果存储在缓存中。否则,从缓存中获取数据并将其发送回视图。由于AJAX是异步的,因此只要数据从服务器返回,就会调用您的回调。
答案 1 :(得分:0)
这就是我要做的事情:
答案 2 :(得分:0)
HTTP请求,即HttpServletRequest对象不可序列化。因此,在调用期间,您无法将它们存储在任何类型的持久存储中。无论如何,存储请求是没有意义的,因为它的生命仅限于HTTP请求本身的持续时间,给定HTTP协议的无状态特性。
这实际上意味着您必须在调用期间保持HttpServletResponse对象。一旦执行了HTTP请求的解析,并且一旦所有数据都可用于您的应用程序,就不再需要HttpServletRequest对象;它是您的上下文中重要的响应对象。
可以使用用户状态的缓存副本填充响应。如果缓存中的副本是陈旧的,您可能希望从XMPP服务器同步刷新它(毕竟,它会影响一个页面加载的性能)。您可以从应用程序服务器中异步查询,但必须将某些结果返回给浏览器(因此可能需要处理一些边缘情况)。