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

hap*_*set 4 django wsgi gunicorn django-channels

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

gunicorn3 --pythonpath . -b 0.0.0.0:8000 chat_bot.wsgi:application
Run Code Online (Sandbox Code Playgroud)

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

daphne --root-path . -b 0.0.0.0 -p 8001 chat_bot.asgi:application
Run Code Online (Sandbox Code Playgroud)

如何以编程方式检测当前运行GreenUnicorn+WSGIDaphne+ASGI 的模式

Rob*_*ley 9

一种可能:

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

os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Web')
Run Code Online (Sandbox Code Playgroud)

然后在里面asgi.py将它设置为不同的变量:

os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Asynchronous')
Run Code Online (Sandbox Code Playgroud)

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

if os.environ.get('SERVER_GATEWAY_INTERFACE') == 'Web':
    # WSGI, do something
else:
    # ASGI, do something else
Run Code Online (Sandbox Code Playgroud)