0

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

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

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

让浏览器等待2分钟现实吗?有没有人有这方面的经验或更好的想法?

4

1 回答 1

0

你有没有想过Push Notification

您当前拥有的是 Pull 通知,您可以在其中轮询服务器以获取响应。

在拉取服务器中,当响应准备好时会通知您,它称为彗星,也称为反向 ajax。

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

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

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

恕我直言,我不觉得这有什么好处,因为它会使您的应用程序看起来好像一次只能处理一个请求,如果这是可以接受的,那么没有问题,尽管考虑到今天的技术,几乎每个人都想在更短的时间。

于 2012-05-01T14:54:58.733 回答