如何使用 Django WebSockets 发送实时数据?
Posted
技术标签:
【中文标题】如何使用 Django WebSockets 发送实时数据?【英文标题】:How can I send real-time data using Django WebSockets? 【发布时间】:2017-08-07 13:30:16 【问题描述】:我想使用 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 数据发送,例如,每秒一次。 【参考方案1】:Django 本质上是同步的,因此它本身是/不可能实现 Web 套接字。然而,django 的核心开发人员之一(我相信它的 Andrew Goodwin,如果它错了,请纠正我!)为此目的开发了channels。 Channels 虽然应该是 django 的一部分,但现在它是一个 django 项目,但与框架分离。 很久以前,当它刚出来时,我就尝试过一次频道。它很好的小东西,虽然你应该知道我引用的它的哲学。
频道被刻意设计为更喜欢低延迟(目标是几个 毫秒)和高吞吐量超过保证交付,这 与某些消息队列设计不匹配。
某些功能(例如有保证的消息顺序)可以选择加入 它们会导致性能下降,但会使其更像消息队列。
如果这听起来不像您想要的,请选择django-websocket-redis。
【讨论】:
是的,我写过我将使用 websockets (Django Channels)。但是我不知道我的消费者等应该是什么样子,我希望有人给我解决方案或提示。以上是关于如何使用 Django WebSockets 发送实时数据?的主要内容,如果未能解决你的问题,请参考以下文章
Django、websockets、Tornado,如何让它们通信?