Ion*_*nut 5 java asynchronous servlet-3.0
在我的应用程序中,我有一个自己开发的框架,它将所有请求映射到一个中央 ControllerServlet(没什么特别的,它具有几乎所有框架的基本功能)。我必须实现发布者-订阅者消息交换功能,并且我决定使用 Servlet 3.0 的异步方法。
当前ControllerServlet和AuthenticationFilter未设置为 asyncSupported。我可以为所有异步处理实现第二个 CotrollerServlet,也可以将现有的 ControllerServlet 声明为asyncSupported=true(即使存在不需要异步处理的请求)。
...对于使用异步功能的应用程序,整个请求处理链必须通过注解或其部署描述符设置此属性... - 源
从这里我明白我必须声明AuthenticationFilter为asyncSupported=true(并且在某些情况下不需要异步)。
声明 servlet 和过滤器是否有任何缺点,asyncSupported=true即使它们也映射不需要异步处理的请求?会不会有任何可扩展性问题?
Java Servlet 3.0规范的2.3.3.3异步处理章节包含一个提示:
从同步 servlet 分派到异步 servlet 是非法的。然而,抛出 IllegalStateException 的决定与应用程序调用 startAsync 时的情况有所不同。这将允许 servlet 充当同步或异步 servlet。
虽然没有直接说明,但这句话让我相信,对于 JLS 作者而言,一个 servlet 的这种双重同步/异步性质并不是什么不寻常的事情。
另一方面,请查阅容器的文档/源代码。仅仅因为从 JLS 的角度来看它是合法的,并不意味着您的容器没有进行一些巧妙的优化,如果AsyncContext不真正使用这些优化,这些优化会对性能产生负面影响。否则,如果所有 servlet 都可以在任一模式下工作,那么除了记录之外,该属性的用途是什么?
| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |