Django-如何检查服务器是以ASGI还是WSGI模式运行?

时间:2018-07-19 19:45:19

标签: django gunicorn wsgi django-channels

我们在WSGI模式下运行同一个django项目,以处理HTTP请求,在ASGI模式下运行同一个django项目,以处理WebSocket。对于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 的模式?

1 个答案:

答案 0 :(得分:3)

一种可能性:

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