Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否可以滥用浏览器超时以避免忙于轮询服务器以获取长时间运行的任务的结果_Java_Spring_Spring Mvc_Cross Browser_Long Polling - Fatal编程技术网

Java 我是否可以滥用浏览器超时以避免忙于轮询服务器以获取长时间运行的任务的结果

Java 我是否可以滥用浏览器超时以避免忙于轮询服务器以获取长时间运行的任务的结果,java,spring,spring-mvc,cross-browser,long-polling,Java,Spring,Spring Mvc,Cross Browser,Long Polling,在我的应用程序中,客户机可以请求一个复杂的任务,这可能需要1-2分钟才能完成。该任务在一个单独的线程中运行,请求处理程序通过BlockingQueue与其通信 目前,服务器会立即将客户端重定向到等待页面,该页面每10秒轮询一次服务器。但是,这是非常低效的,如果任务在轮询后立即完成,客户端可能需要额外等待10秒 我想做的是允许阻塞等待页面的请求处理程序,直到任务完成,然后才将响应写入用户。根据我的观察,如果服务器接受TCP套接字,并且可能已经写回了一些头文件,大多数浏览器将使用更长的超时时间,但是

在我的应用程序中,客户机可以请求一个复杂的任务,这可能需要1-2分钟才能完成。该任务在一个单独的线程中运行,请求处理程序通过BlockingQueue与其通信

目前,服务器会立即将客户端重定向到等待页面,该页面每10秒轮询一次服务器。但是,这是非常低效的,如果任务在轮询后立即完成,客户端可能需要额外等待10秒

我想做的是允许阻塞等待页面的请求处理程序,直到任务完成,然后才将响应写入用户。根据我的观察,如果服务器接受TCP套接字,并且可能已经写回了一些头文件,大多数浏览器将使用更长的超时时间,但是我不确定不同浏览器之间的确切超时时间

让浏览器等待2分钟是否现实?有人对此有经验或更好的想法吗?

您是否考虑过推送通知

您当前拥有的是拉式通知,您可以在其中轮询服务器以获得响应

在pull中,服务器将让您知道响应何时准备就绪,它称为comet,也称为反向ajax

在这种情况下,您的浏览器不需要再等待,您可以继续其他工作,一旦响应就绪,就将其呈现给用户

是的,可以让浏览器等待,只是不要写响应

要解释的是,当您提交工作,而不是重定向到其他页面时,不要提交响应,而是启动服务器处理,完成后提交响应。在UI中显示处理消息,以便用户知道提交的任务正在处理中

我不认为这有什么好处,因为它会让你的应用程序看起来好像一次只能处理一个请求,如果这是可以接受的,那么就没有问题了,尽管考虑到当今的技术,几乎每个人都希望在更短的时间内做更多的事情。

这被称为长轮询或comet,有助于谷歌搜索,但是要知道有很多问题,除非你真的马上就需要它,否则对于这样一个小的用例来说,付出努力是不值得的。