编程语言
首页 > 编程语言> > java – Servlet 3.0 async支持的缺点

java – Servlet 3.0 async支持的缺点

作者:互联网

在我的应用程序中,我有一个自行开发的框架,它将所有请求映射到一个中央ControllerServlet(没什么特别的,它具有几乎任何框架的基本功能).
我必须实现Publisher-Subscriber消息交换功能,我决定使用Servlet 3.0的异步方法.

当前的ControllerServlet和AuthenticationFilter未设置为asyncSupported.我可以为所有异步处理实现第二个CotrollerServlet,或者将现有的ControllerServlet声明为asyncSupported = true(即使存在不需要异步处理的请求).

…对于使用异步功能的应用程序,整个请求处理链必须通过注释或其部署描述符设置此属性…
– source

从这里我明白我必须将AuthenticationFilter声明为asyncSupported = true(并且有时不需要async).

将asletSupported = true声明为servlet和过滤器是否有任何缺点,即使它们也映射了不需要异步处理的请求?是否会出现任何可扩展性问题?

解决方法:

2.3.3.3 Java Servlet 3.0 specification的异步处理章节包含一个提示:

Dispatching from a synchronous servlet to an asynchronous servlet would be illegal.
However the decision of throwing an IllegalStateException is differed to the
point when the application calls startAsync. This would allow a servlet to either
function as a synchronous or an asynchronous servlet.

它没有直接说明,但这句话让我相信,就JLS作者而言,一个servlet的这种双重同步/异步性质并不是不可能的.

另一方面,请查阅容器的文档/源代码.仅仅因为从JLS的角度来看它是合法的并不意味着如果没有真正使用AsyncContext,你的容器没有做一些对性能有负面影响的聪明的优化.否则,如果所有servlet都可以在任一模式下工作,那么除了记录之外,这个属性的目的是什么?

标签:java,asynchronous,servlet-3-0
来源: https://codeday.me/bug/20190709/1414083.html