【问题标题】:How to run Gunicorn while still using WebSocket如何在仍然使用 WebSocket 的同时运行 Gunicorn
【发布时间】:2020-01-30 02:07:47
【问题描述】:

所以我在这个 python 聊天应用项目中使用了一个 docker。

我最初在 docker-compose 中使用 python manage.py runserver 0.0.0.0:8000 作为我的命令。

我发现如果我想在 web 上部署我的应用程序(比如 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


    【解决方案1】:

    在使用 ASGI 时,对于异步服务器 (websockets),您应该使用异步服务器,例如 Daphne 或 Uvicorn,Django documentation 提供了如何部署它们的示例。

    如果你想直接使用 uvicorn,你可以这样做:

    uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000
    

    您还可以使用工人类通过 gunicorn 运行 uvicorn:

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

    【讨论】:

      猜你喜欢
      • 2020-07-20
      • 1970-01-01
      • 2022-01-19
      • 2019-04-17
      • 2016-08-28
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      相关资源
      最近更新 更多