Django - 如何检查服务器是 运行 ASGI 还是 WSGI 模式?
Django - How to check if server is running in ASGI or in WSGI mode?
我们是 运行 在 WSGI 模式下处理 HTTP 请求和在 ASGI 模式下处理 WebSockets 的同一个 django 项目。对于 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?
一种可能:
在您的 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
我们是 运行 在 WSGI 模式下处理 HTTP 请求和在 ASGI 模式下处理 WebSockets 的同一个 django 项目。对于 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?
一种可能:
在您的 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