2012-04-18 156 views
2

今天我发现了Servlet 3.0的异步设施。我已经读过它并认为我理解了这个概念。Grails - Servlet 3.0异步请求处理

我想知道:这会对“标准”控制器的操作产生什么影响,还是应该将它保存为使用Web服务或广泛的计算过程?

换句话说,在所有控制器的操作中使用它,在事先没有考虑动作方法的计算时间的情况下使用它是不是一个好主意? 如果是这样,你能向我解释为什么?

预先感谢您。

回答

2

不,这将是一个坏主意。

在控制器操作上,您会收到一个请求,并且希望尽快提供响应。您只能将该异步用于可能会延迟的事情。

如果用户在您的网站上请求某个页面,则无法用空白页面进行响应,然后再推回来更新其页面。我只会将此功能用于AJAX请求,甚至不适用于所有这些功能。你必须决定什么是有意义的运行异步运行,哪些不运行。

+0

大多数流行的Java Web容器可以同时处理多个请求吗?也就是说,如果一个请求阻塞了,是否会将所有将来的请求放入一个队列中,直到原始请求结束?对我而言,这将是使用ayncs的主要原因:释放服务器。 – duma 2013-06-02 19:49:15

1

你应该阅读的Grails文档Asynchronous Request Handling

一般为快速执行有在异步处理请求毫无益处控制器动作。但是,对于长时间运行的控制器操作,这是非常有益的

原因是,对于异步/非阻塞响应,一个线程==一个请求==一个响应关系被破坏。容器可以保持客户端响应处于打开状态并处于活动状态,同时将线程返回到容器以处理另一个请求,从而提高可伸缩性。

希望这应该足够清楚,但请问是否有什么不清楚。