但是如果我的应用程序只触碰一千个用户发送数据到服务器的用户呢?
如果它有效,我什么时候不得不打扰配置更复杂的Web服务器? (我正在寻找近似度量)。
简而言之,我想要找到内置的Web服务器可以做什么(具有大约阈值)以及它不能做什么。
非常感谢 !
解决方法
通过适当的水平缩放量,您可以永远不断扩展调试服务器的使用情况。当您需要开始缩放(或切换到使用“真正的”Web服务器)时,还将取决于您托管的环境,用户的期望等。
您可能遇到的主要问题是服务器是单线程的。这意味着它会一次一个一个地处理每个请求。这意味着如果您尝试提供多个请求(包括favicons,静态项目,如图像,CSS和Javascript文件等),请求将需要更长时间。如果任何给定的请求发生了很长时间(比如说20秒),那么整个应用程序在那段时间(20秒)就没有反应。这只是默认的,当然可以让线程计数(或者请求在其他进程中处理),这可能会减轻一些问题。但是,再一次,在“高”的负荷下,仍然可能会很慢。被认为是“高”负载将取决于您的应用和最大可接受的响应时间的期望。
另一个问题是安全性:如果您对所有关于安全性(而不仅仅是应用程序本身的数据的安全性,还是将运行它的框的安全性)都关心,那么您不应该使用开发服务器。它还没有准备好承受任何形式的攻击。
最后,开发服务器可能直接失败。它不是用作长时间运行的过程(几天,几周,几个月),因此没有经过很好的测试来工作。
那么是的,它有局限性。是的,你仍然可以想象在生产中使用它。是的,我仍然建议使用“真正的”Web服务器。如果您不喜欢安装像Apache或Nginx这样的想法,那么仍然可以使用一些解决方案,通过使用一些WSGI Standalone servers可以运行一些服务器,这些解决方案仍然像“运行python脚本”一样简单被设计为在生产中与在命令行中运行python run_app.py一样简单。您通常只需要创建一个4-5行的python脚本即可导入并创建服务器对象,并将其指向Flask应用程序,然后运行它。
在命令行上只能使用以下命令来执行加油枪,不需要额外的脚本:
gunicorn myproject:app
…其中“myproject”是包含应用程序Flask对象的Python包。