Web 服务器的后台发生了什么?

What happen in the background on a web server?

我刚开始使用 Python 和 Flask 框架学习后端 Web 开发。

我的第一个应用程序是最简单的一个,它returns"Hello World!"当用户发送网站主页请求时。

下面,您可以看到我的应用程序的结构:

myWebsiteDirectory/
    app/
        __init__.py
    setup.py
    wsgi.py

下面是 python 个文件的内容:

setup.py

from setuptools import setup

setup(name='YourAppName',
      version='1.0',
      description='OpenShift App',
      author='Your Name',
      author_email='example@example.com',
      url='http://www.python.org/sigs/distutils-sig/',
      install_requires=['Flask>=0.10.1'],
     )

wsgi.py

#!/usr/bin/python
import os

#virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/'
virtenv = os.path.join(os.environ.get('OPENSHIFT_PYTHON_DIR','.'), 'virtenv')
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
    execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
    pass
#
# IMPORTANT: Put any additional includes below this line.  If placed above this
# line, it's possible required libraries won't be in your searchable path
#

from app import app as application

#
# Below for testing only
#
if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    httpd = make_server('localhost', 8051, application)
    # Wait for a single request, serve it and quit.
    httpd.serve_forever()

__init__.py

from flask import Flask

app = Flask(__name__)
app.debug = True

@app.route('/')
def not_again():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

我的问题是什么:

当我将此文件上传到服务器时会发生什么?当用户请求我的网站时会发生什么?

换句话说:

  1. 当Python解释服务器上的上述文件的每一个? (每个文件解释多少次)?
  2. 当用户发送请求时会发生什么? His/Her 请求重新解释文件或请求引用 运行 函数作为参数?如果是这样,服务器上不应该有一个无限循环来捕获请求吗?如果是这样,那个无限循环在哪里?
  3. 当 Web 服务器尚未完成上一个请求时用户发送请求时会发生什么情况?那些 argument/script refers/interpret 再次在这个新用户的单独环境中或 he/she 必须等待服务器完成对先前请求的回答?

再一次,换句话说:

虽然上面的问题是基于Python&Flask web framework web developing,但是对于所有的语言和框架都有一个通用的机制,请告诉我通用的过程而不是这个具体案例。

如果您对网络服务器的工作原理不太了解,既然您对 Python 感兴趣,我建议您阅读:

如果有兴趣逐步了解如何使用 Python 网络框架来构建网站,那么也可以考虑阅读:

这是一个很好的基本介绍,可以让人们继续前进。

这些将为您提供工作的基础知识。特定的 WSGI 服务器或服务提供商的工作方式可能会有所不同,但您首先通过上述工作将能够更好地理解。