gpt4 book ai didi

django - 我需要开始工作吗?

转载 作者:行者123 更新时间:2023-12-04 14:34:10 32 4
gpt4 key购买 nike

我在某处读到过,如果我在代码中的某处使用 channel_layer.send(....),我只需要启动一个 worker 。 .
这样对吗?我认为工作人员是处理所有 WebSocket 请求的人。

最佳答案

您的问题背后有许多有趣的概念需要澄清。
我们先从 WebSocket 的使用说起。
网络套接字
WebSocket 很可能是您使用 Django Channels 的主要兴趣,因为 Django 单独管理 HTTP。
为此,您不需要 channel 层,也不需要正在运行的工作程序。
开发中 ,这是您通常在启动标准 Django 项目时看到的内容:

$ python manage.py runserver

Performing system checks...
...
Django version 2.1.5, using settings 'djlistener.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
但是,添加 channelsINSTALLED_APPS并定义 ASGI_APPLICATION按照 Django Channels 文档的建议进行设置,您会注意到输出略有不同:
$ python manage.py runserver

Performing system checks...
...
Django version 2.1.5, using settings 'djlistener.settings'
Starting ASGI/Channels version 2.1.6 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
那是因为 Channels 的开发服务器已经接管了 Django 开发服务器,您可以立即开始使用 HTTP 和 WebSocket 通信。
生产中 :
  • 您可以选择将 Daphne 用于 HTTP 和 WebSockets 请求,因为 Daphne 将在 HTTP 和 WebSocket 之间自动协商。
  • 或者,您可以拆分 HTTP 和 WebSocket 流量:通过 WSGI 服务器运行标准 HTTP 请求,并仅将 Daphne(或 uvicorn)用于 WSGI 无法执行的操作,例如 WebSocket、HTTP 长轮询或其他 IoT 协议(protocol)。

  • 引用:
  • Django channel 的文档:HTTP and WebSocket
  • How To Deploy Django Channels To Production

  • channel 层
    自 2.0 版起, channel 层是 channel 的完全可选部分。
    它们提供了一种抽象,允许您出于多种目的在应用程序的不同实例之间进行对话。
    如何?当您发送消息时,它会被收听另一端的组或 channel 的消费者接收。
    我使用 channel 层的主要动机是组概念,它让我向所有注册(连接时)到特定组的 WebSocket 客户端广播一条消息。为此,我不需要 worker :我用 channel_layer.group_send() 将我的消息发送到组,Channels Layer 将其传递给 Consumer,后者又将其发送给 WebSocket 客户端。
    Worker 和后台任务
    channel 层的一个非常特殊的用途是将一些工作委托(delegate)给一组监听固定 channel 名称的工作服务器,作为一个简单的任务队列。
    这里 (仅在此处)是哪里 runworker命令进来。
    大多数情况下,您会为此使用其他著名的解决方案,例如 Celery 或 Django-rq;但在某些情况下,对于简单的后台任务队列,这可能是一种廉价且延迟极低的替代方案。
    引用:
    Worker and Background Tasks

    关于django - 我需要开始工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58085318/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com