gpt4 book ai didi

django - 引入 Django Channels 时是否需要更改我的正常 Django 代码?

转载 作者:行者123 更新时间:2023-12-04 04:05:43 26 4
gpt4 key购买 nike

您好我是python世界的初学者,所以我仍然在尝试了解使用ASGI时的注意事项。我阅读了一些教程和文档,并在 youtube 上观看了一些视频。但是,我在某些方面不确定。
我有一个使用 Django + Django Rest Framework 的小型后端应用程序。
我的代码非常琐碎,由框架中最常见的概念组成: View 、序列化器、模型、url 等。另外,我使用了关系数据库。
我的环境是这样的:

  • Python 3.8
  • Django 3
  • Django 休息框架 3.11

  • 现在,我需要添加对 WebSockets 的支持,并且我做了 Django Channels 教程中描述的基本配置:
  • 我安装了 Django Channels 2.4.0 (Daphene 2.5.0)
  • 将“ channel ”添加到 INSTALLED_APPS
  • 我创建了一个带有空 ProtocolTypeRouter
  • 的 routing.py 文件
  • 我将 ASGI_APPLICATION 添加到我的 settings.py
  • 我将 asgi.py 文件配置为使用 channel
  • 目前,我还没有配置任何 channel 层
  • 目前,我还没有创建任何 WebSocket 端点

  • 在这些配置之后,运行服务器正在使用 ASGI 开发服务器,显然我的 REST 端点都在工作。
    一些问题:
  • 考虑到我所有的代码都是同步的,难道没有必要对其进行任何调整吗?
  • 考虑到它是一个 ASGI 服务器,上面的这个配置已经完成了我的同步代码在 daphene 中安全执行所需的所有魔法?
  • 我能否以可靠和稳定的方式仅使用 ASGI 来处理正常的 HTTP 和 WebSockets 请求?或者,是否建议使用 WSGI 服务 HTTP 流量,只将 WebSockets 流量留给 daphene?
  • 关于同步代码,究竟应该注意哪些地方?
  • 最佳答案

    这些是我根据以前使用 Django Channels 2 的经验得出的答案......
    1)考虑到我所有的代码都是同步的,是不是有必要对其进行任何调整?
    您可以安全地保留现有的同步代码:无需调整;只需确保调用 django-channels API 的“同步版本”(即 SyncConsumer 而不是 AsyncConsumer)。
    另一方面,Channel Layers使用不同的方法,并且仅提供异步版本。
    当从同步代码发出调用时,您需要使用 async_to_sync 包装器;例如:

    from asgiref.sync import async_to_sync

    async_to_sync(channel_layer.group_send)(
    group, {
    "type": 'data_received',
    "content": data,
    })
    2) 考虑到它是一个 ASGI 服务器,上面的这个配置已经完成了我的同步代码在 daphene 中安全执行所需的所有魔法吗?
    唯一缺少的详细信息是(在设置文件中):
    ROOT_URLCONF = 'project.urls'
    3) 我能否以可靠和稳定的方式仅使用 ASGI 服务正常的 HTTP 和 WebSockets 请求?或者,是否建议使用 WSGI 服务 HTTP 流量,只将 WebSockets 流量留给 daphene?
    使用 Channels 2,您可以安全地选择对 HTTP 和 WebSockets 请求使用 Daphne,因为 Daphne 将在 HTTP 和 WebSocket 之间自动协商;这是我通常在我的项目中做的事情。
    拆分 HTTP 和 WebSocket 流量,因此:
  • 通过 WSGI 服务器运行标准 HTTP 请求
  • 仅将 Daphne(或 uvicorn)用于 WSGI 不能做的事情,例如 WebSockets、HTTP 长轮询或其他 IoT 协议(protocol)

  • 是可能的,但完全是可选的。

    关于django - 引入 Django Channels 时是否需要更改我的正常 Django 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62544489/

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