代码之家  ›  专栏  ›  技术社区  ›  Dmitry Senkovich

Spring MVC(异步)与Spring WebFlux

  •  72
  • Dmitry Senkovich  · 技术社区  · 8 年前

    我在试着理解Spring WebFlux。到目前为止,我发现的东西在核心是反应式的,没有Servlet API,每个请求没有线程,HTTP 2,服务器推送,应用程序/流+json。

    但是Spring MVC中的异步调用之间有什么区别?我的意思是,在Spring MVC中,当您返回Future、DefferedResult等时,您会在单独的线程中执行请求处理程序(控制器方法)中的逻辑,因此您也可以从节省线程池资源以调度请求中受益。

    那么,你能强调一下与此相关的差异吗?为什么WebFlux在这里更好?

    2 回复  |  直到 8 年前
        1
  •  55
  •   Brian Clozel    8 年前

    Servlet异步模型在容器线程(1个Servlet请求/线程模型)和应用程序中的请求处理之间引入了异步边界。处理可以在不同的线程上进行,也可以等待。最后,您必须调度回容器线程,并以阻塞方式进行读/写( InputStream OutputStream 本质上是阻塞API)。

    使用非阻塞代码,您只需要几个线程即可同时处理大量请求。这是一个不同的并发模型;与任何模型一样,它也有好处和权衡。

    有关该比较的更多信息,请参阅 Servlet vs. Reactive stacks talk

        2
  •  9
  •   Javed Afroz    6 年前

    Servlet API正在阻止I/O,每个HTTP请求需要1个线程。Spring MVC async依赖于Servlet API,该API仅提供容器线程和请求处理线程之间的异步行为,而不是端到端。

    另一方面,Spring WebFlux通过使用HTTP套接字并通过套接字一次推送数据块,通过固定数量的线程实现并发。这种机制称为 事件循环 节点。js公司 . 这种方法具有可扩展性和弹性。Spring 5的Spring webflux使用 事件循环 提供异步行为的方法。

    更多信息可从