如何在仍然使用 WebSocket 的同时运行 Gunicorn

问题描述 投票:0回答:2

所以我在这个 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?谢谢!!

python django docker websocket gunicorn
2个回答
12
投票

使用 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

0
投票

如果您将gunicorn与uvicornworker和socker.io一起使用,请尝试这个

gunicorn myproject.asgi:application -w 1 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000

-w 1
将 Gunicorn 限制为 1 名为我工作的工人。

© www.soinside.com 2019 - 2024. All rights reserved.