2017-09-03 112 views
0

注意:这个问题是作为一个副本关闭的,但它不是(不是问题)。 我特别描述了一个应用程序在Web模式下,然后在WSGI模式 - 我毫不怀疑要使用什么时候(两个链接的问题解决这一点)。我还解释说,我很清楚Web服务器的用途。 接受的答案对此作了很好的总结,并回答了Web服务器是否是运行prod flask应用程序的要求(不是)。在瓶部署中使用Web服务器有什么用途?

我有一个flask应用程序。开发版,with all its limitations,是

import flask 

app = flask.Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

app.run() 

当我想将它移动到生产,我用geventper the deployment documentation

import gevent.monkey 
gevent.monkey.patch_all() 
import flask 
import gevent.wsgi 

app = flask.Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

gevent.wsgi.WSGIServer(('127.0.0.1', 5000), app).serve_forever() 

两种情况下工作,与第一个偶尔有问题(这是并非意外,由于其性质)。

然后,我在这里和那里读到的很多信息都提到,flask应用程序的生产部署的第三个组件是Web服务器(Apache,nginx)。 WSGI启用的烧瓶应用的实际用途是什么?

具体而言,我想了解它是否对烧瓶应用的性能/稳定性有实际影响。

我知道一个web服务器的各种用法(认证,反向代理,白名单,重写,负载管理和其他许多)。我的问题具体是关于Web服务器为烧瓶WSGI应用(如果有的话)提供的

+0

使用Flask,您可以构建您的Web应用程序。 WSGI是应用程序遵循的由WSGI服务器托管的接口。 gevent是一个WSGI服务器,可以托管你的应用程序。通常情况下,您需要在其前端放置一个完整的Web服务器(nginx或apache)作为*反向代理*,以获得现代Web服务器提供的全部功能,而无需中间WSGI服务器自己提供这些功能。这使得一切都变得简单和容易推理。 – poke

+0

@poke:*获得现代Web服务器提供的全部功能,而不需要中间的WSGI服务器自己提供这些功能。*您是否提到了我在问题中提到的一些功能?换句话说,如果我想让我的网络服务器回复'Hello World'(当然是服务器的容量 - 但这不会被web服务器改进,但是使用速率限制或类似的东西)'' gevent'服务器是正确的选择?我试图理解,如果选择是二进制的:开发dev的服务器,产品的'gevent',然后可能一些额外 – WoJ

+0

@poke(续)...一个web服务器的舒适功能('gevent'只是一个WSGI服务器的示例) – WoJ

回答

1

使用Flask,您可以构建您的Web应用程序。 WSGI是应用程序遵循的由WSGI服务器托管的接口。 gevent是一个WSGI服务器,可以托管你的应用程序。

通常情况下,您可以在它之前放置一个完整的Web服务器(例如nginx或apache)作为反向代理,以获得现代Web服务器通常提供的全部功能,而不需要中间WSGI服务器提供这些功能他们自己。这使得所有事情变得更简单和更容易推理,因为每个组件都可以专注于它最擅长的事情(WSGI服务器的工作是只有承载您的应用程序)。

Flask附带的开发服务器是一个非常简单的服务器,可以在单个进程中运行。它使用werkzeug为此,它也明确提到它不应该用于生产:

开发服务器不适用于生产系统。它是专门为开发目的而设计的,在高负载下表现不佳。对于部署设置,请查看Application Deployment页面。

因此,您使用“真正的”WSGI服务器来托管您的应用程序;它会做任何必要的操作来正确运行你的应用程序。尽管WSGI服务器仍然非常简单,您将另一台Web服务器作为反向代理放在前面,以访问使Web服务器真正强大的功能(例如负载平衡,缓存,SSL终止等)。