【问题标题】:Django - How to check if server is running in ASGI or in WSGI mode?Django - 如何检查服务器是在 ASGI 还是在 WSGI 模式下运行?
【发布时间】:2018-12-28 01:33:14
【问题描述】:

我们在 WSGI 模式下运行相同的 django 项目来处理 HTTP 请求,并在 ASGI 模式下处理 WebSockets。对于 WSGI 模式,我们使用 gunicorn3 服务器:

gunicorn3 --pythonpath . -b 0.0.0.0:8000 chat_bot.wsgi:application

对于 ASGI 模式,我们使用 daphne 服务器:

daphne --root-path . -b 0.0.0.0 -p 8001 chat_bot.asgi:application

如何以编程方式检测当前正在运行的模式是 GreenUnicorn+WSGI 还是 Daphne+ASGI

【问题讨论】:

    标签: django gunicorn wsgi django-channels


    【解决方案1】:

    一种可能性:

    在您的 wsgi.py 文件中,您可以将环境变量设置为您不会在其他任何地方设置的值:

    os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Web')
    

    然后在asgi.py 内部将其设置为不同的变量:

    os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Asynchronous')
    

    然后在代码的其他部分,只需检查环境变量:

    if os.environ.get('SERVER_GATEWAY_INTERFACE') == 'Web':
        # WSGI, do something
    else:
        # ASGI, do something else
    

    【讨论】:

    • 为什么要使用环境变量,而不是在项目中的某个 Python 模块中设置全局 Python 变量来存储它?
    猜你喜欢
    • 2020-01-08
    • 2020-01-21
    • 2017-01-24
    • 2013-03-09
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2019-09-15
    • 2021-08-14
    相关资源
    最近更新 更多