【问题标题】:How can I send real-time data using Django WebSockets?如何使用 Django WebSockets 发送实时数据?
【发布时间】:2026-01-15 18:20:17
【问题描述】:

我想使用 Django WebSockets 从外部 API 发送实时数据。我对 HTTP 的看法是这样的:

@permission_classes([GetPermission])
class DataList(GenericAPIView):

    serializer_class = ObjectSerializer

    def get(self, request):
        parameter = self.request.query_params.get('parameter', None)
        queryset = ExternalAPI().get(parameter, "RSQA")
        id = Object.objects.get(parameter=parameter).id
        queryset["id"] = id
        return Response(queryset)

我想使用 WebSockets 而不是 HTTP 来不断地发送我的数据。没有要求就发送它是一个好的解决方案并且可以接受吗?我想知道应该怎么做?如果在我的GenericAPIView 上显示示例,我将不胜感激。

【问题讨论】:

  • 实时是什么意思?
  • @Rob 数据发送,例如,每秒一次。

标签: python django python-3.x websocket django-channels


【解决方案1】:

Django 本质上是同步的,因此它本身是/不可能实现 Web 套接字。然而,django 的核心开发人员之一(我相信它的 Andrew Goodwin,如果它错了,请纠正我!)为此目的开发了channels。 Channels 虽然应该是 django 的一部分,但现在它是一个 django 项目,但与框架分离。 很久以前,当它刚出来时,我就尝试过一次频道。它很好的小东西,虽然你应该知道我引用的它的哲学。

频道被刻意设计为更喜欢低延迟(目标是几个 毫秒)和高吞吐量超过保证交付,这 与某些消息队列设计不匹配。

某些功能(例如有保证的消息顺序)可以选择加入 它们会导致性能下降,但会使其更像消息队列。

如果这听起来不像您想要的,请选择django-websocket-redis

【讨论】:

  • 是的,我写过我将使用 websockets (Django Channels)。但是我不知道我的消费者等应该是什么样子,我希望有人给我解决方案或提示。
最近更新 更多