以下讨论已成功说明非阻塞Web服务器对传统Web应用程序不会有任何好处/更好。
Django is not asynchronous, so running Django in Tornado will remove most of the performance benefits you might get from Tornado.
Play框架中存在nonblocking model,但它对Web服务器没有任何特殊要求(它给我的印象是任何tomcat或jetty都可以工作,不支持Tornado's非阻塞模型本身)。我的问题是:像Tomcat这样的传统Web服务器如何使像Play这样的非阻塞启用的Web框架受益?
答案 0 :(得分:3)
HTTP请求的异步服务(当一个线程可以提供多个HTTP请求时)is available从Servlet API开始3. Tomcat 7和Jetty 8支持Servlet API 3.
在较旧的servlet 2容器上运行Play / Akka应用程序没有多大好处,因为请求不会释放为其整个生命周期分配的线程。但是,对于某些后台处理任务,即使在这种情况下,异步功能和Akka actor也很方便。
Django实际上是非异步的。 Tornado在内部是异步的,即它允许在单个线程中处理多个TCP连接,但是当tornado.wsgi
用于与Django互操作时,它为请求分配一个线程,调用WSGI在其中可调用,并且该线程被分配给这整个生命周期的单一要求。 WSGI类似于Servlet API 2。