所以我在这个 python 聊天应用程序项目中使用了 docker。
我最初在 docker-compose 中使用
python manage.py runserver 0.0.0.0:8000
作为我的命令。
我发现如果我想在网络上部署我的应用程序(如heroku),我应该切换到gunicorn。我发现教程说只需将 docker-compose 中的命令更改为
gunicorn myproject.wsgi -b 0.0.0.0:8000
。我这样做了,所有的 websocket 连接都中断了。由于 websocket 仍处于 CONNECTING 状态,导致发送失败,一段时间后握手失败,状态代码为 404。除了一行之外,所有设置都与以前相同。只是想知道我还需要更改什么才能使 websocket 与 Gunicorn 一起使用?谢谢
编辑:在互联网上进行一些挖掘后,似乎gunicorn不应该与websocket一起运行(我想是wsgi asgi差异?)如果有人可以告诉我一些我可以使用而不是gunicorn作为网络服务器的东西,我将非常感激,或者是否有任何方法可以在我的 django 通道仍然工作的情况下运行 Gunicorn?谢谢!!
使用 ASGI 时,对于异步服务器(websockets),您应该使用异步服务器,例如 Daphne 或 Uvicorn,Django 文档 有关于如何部署它们的示例。
如果你想直接使用 uvicorn 你可以这样做:
uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000
您还可以使用工作类运行 uvicorn through Gunicorn:
gunicorn myproject.asgi:application -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
如果您将gunicorn与uvicornworker和socker.io一起使用,请尝试这个
gunicorn myproject.asgi:application -w 1 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
-w 1
将 Gunicorn 限制为 1 名为我工作的工人。