【问题标题】:uWSGI equivalent for Django-ChannelsDjango 通道的 uWSGI 等效项
【发布时间】:2017-08-31 18:18:39
【问题描述】:

我知道 Django 是请求/响应周期,而 Django Channels 是不同的,我的问题与此无关。

我们知道 uWSGI/gunicorn 创建工作进程并且可以配置在线程中执行每个请求。这样它就可以在具有 10 个线程的单个 uWSGI 工作进程中“同时”(非并行)处理 10 个请求。

现在让我们假设每个 web 客户端都想使用 Django Channels 创建一个 websocket,根据我有限的理解(使用 vanilla 实现),它将在单个线程中处理每条消息,这意味着同时处理 x 数量的连接,您需要 x 个通道工作进程。我知道有人会建议增加进程数,我不是来讨论这个的。

我的问题是,是否有任何现有的库可以与 uWSGI/gunicorn 执行类似的工作,在线程中执行消费者函数?

【问题讨论】:

    标签: django django-channels


    【解决方案1】:

    我想你要的是daphnechannels document 本身就提到了它。

    【讨论】:

      【解决方案2】:

      Daphne 提供了扩展进程using a shared FD 的选项。不幸的是,它没有按预期工作。

      现在,更好的选择是使用uvicorn。您可以运行多个工人

      $ uvicorn project.asgi --workers 4
      

      我一直在生产中使用它,它看起来已经足够好了。

      【讨论】:

      • 这似乎值得商榷。我看不到对通道层或组之类的支持。似乎您需要使用自己的 App 类自己构建它。它很容易为每个 Daphne 工作人员设置一个套接字并让 Nginx 分散负载。我使用 HAProxy,它允许我拥有一个套接字和任意数量的工人。我可以在不中断任何连接的情况下进行部署,方法是在通过 HAProxy 重新启动工作人员之前排空工作人员。
      • 是的。你说的对。我们可以使用 nginx/HAProxy 运行多个 daphne 和负载均衡实例。我最初就是这样做的。一旦我遇到独角兽,我就尝试过并切换到那个。
      猜你喜欢
      • 2019-02-15
      • 2012-01-20
      • 2020-09-26
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2016-07-13
      • 2013-11-16
      相关资源
      最近更新 更多