如何在仍然使用 WebSocket 的同时 运行 Gunicorn
How to run Gunicorn while still using WebSocket
所以我正在为这个 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 的东西对于网络服务器,我将不胜感激,或者如果有任何方法可以 运行 gunicorn 我的 django 频道仍在工作?谢谢!!
使用 ASGI 时,对于异步服务器 (websockets),您应该使用异步服务器,例如 Daphne 或 Uvicorn,Django documentation 有关于如何为它们部署的示例。
如果你想直接使用 uvicorn,你可以这样做:
uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000
您还可以 运行 uvicorn 通过 gunicorn 使用工人 class:
gunicorn myproject.asgi:application -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
所以我正在为这个 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 的东西对于网络服务器,我将不胜感激,或者如果有任何方法可以 运行 gunicorn 我的 django 频道仍在工作?谢谢!!
使用 ASGI 时,对于异步服务器 (websockets),您应该使用异步服务器,例如 Daphne 或 Uvicorn,Django documentation 有关于如何为它们部署的示例。
如果你想直接使用 uvicorn,你可以这样做:
uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000
您还可以 运行 uvicorn 通过 gunicorn 使用工人 class:
gunicorn myproject.asgi:application -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000