使用NIO的REST API?

Pou*_*sen 8 java rest nio servlet-3.0

我一直致力于构建一个公共API,它将具有大量的并发访问,并且我认为其中一个方面是使用异步I/O来考虑可伸缩性方面.

最初我认为使用Nginx作为HTTP服务器(事件驱动),因为他以异步方式工作,与Tomcat不同.API将使用Java构建,我认为使用了以下组件:

  • Tomcat 7 - HTTP/Web服务器+ Java容器
  • Netty.io还是HttpCore?
  • Resteasy(REST层,带有HttpServlet30Dispatcher servlet)
  • MongoDB(带异步Java驱动程序)

我见过很多关于Servlet 3.0的讨论,因为新版本支持异步请求(使用NIO).根据我的问题和上面的模型,我有一些问题:

  1. 一旦我计划使用支持异步请求的Servlet 3.0,是否有必要使用Netty.io?
  2. 使用事件驱动的webserver(例如:Jetty)与使用基于进程的Web服务器不同,例如Tomcat 7(支持Servlet 3.0),它不是一个事件驱动的Web服务器?
  3. 我在许多网站上看到Netty.io的工作方式是线程可以接受多个请求,而不是一个线程对等请求的经典方式.在实践中,它是如何工作的?
  4. 异步请求处理(Servlet 3.0)和非阻塞IO(NIO)是不同的概念?用哪种方法?
  5. 我从来没有看到使用NIO的REST API,这是一个好方法吗?我可以遇到哪些潜在问题?

use*_*421 3

当我计划使用也支持异步请求的Servlet 3.0时,是否有必要使用Netty.io?

不,应该全部由容器来处理。

使用事件驱动的 Web 服务器(例如:Jetty)与使用基于流程的 Web 服务器(如 Tomcat 7(支持 Servlet 3.0))不同,后者不是事件驱动的 Web 服务器?

我不知道有任何这样的差异。它们都实现了 Servlet 3.0,因此在某种程度上它们都是事件驱动的。

我在许多网站上看到 Netty.io 的工作方式是一个线程可以接受多个请求,而不是一个线程对等请求的经典方式。在实践中,又是如何运作的呢?

这是无关紧要的,参见上面的(1)。

异步请求处理(Servlet 3.0)和非阻塞IO(NIO)是不同的概念?以何种方式?

是的。各方面。这是一个太大的问题,无法在这里解决。

我从未见过使用 NIO 的 REST API,这是一个好方法吗?我会遇到哪些潜在问题?

我很少看到需要在客户端使用 NIO。