如何使用持久的http请求

如何使用持久的http请求

问题描述:

我有一个持久的http请求(在后端大量计算)。如何使用持久的http请求

目前它都是同步的,而服务器计算机,浏览器没有看到输出/结果。过了一段时间,连接断开,浏览器显示超时错误。

我想立即返回一些信息到浏览器,并等待结果。如何实现这一目标?

请注意,Java后端是同步的。所以一个解决方案需要在servlet /前端可能需要javascript请求的某些黑客 ..?

最好的解决方案是使用AJAX请求。一旦ajax请求超时,您可以使用JavaScript再次发送它(您可以显示一些按钮)。这可能是处理超时的最佳做法。

+0

第一个请求必须是一个同步调用(我发送一个html表单)。 – 2013-05-14 11:42:59

+0

@RoaySpol你可以随时等待你的AJAX请求完成 – 2013-05-14 11:44:56

你可能想要使用COMET模式。这就像AJAX模式一样,只有长时间的HTTP请求才能模拟Feed。有关详细说明,请参见here

基本上,你发起请求,服务器持有它,然后当它感兴趣的时候回复。在收到答复时,您立即开始另一个长期请求。

这个时间序列使它感觉像一个饲料。

就你而言,它可能会立即返回“是啊,我正在处理它”,然后回复“仍然处理完10%的家伙”等等,直到你回到“完成”为止。

像node.js这样的东西真的很擅长实现这种功能。

尽管在使用同步Java后端时,您可能需要某种迹象表明进展正在进行。可能是一个数据库。

只要你写输出流的东西(它甚至可以是空格,不要忘了叫flush())就不会出现超时。

这样的持久请求会让你感觉很舒服,例如打印一个大的报告,随后在用户生成时显示给用户。

在所有其他情况下,将等待页面返回给用户并使用定期AJAX请求询问处理是否已完成。当没有任何变化,浏览器显示加载时,这不是一个好的用户体验。