如何使用Django WebSockets发送实时数据?

时间:2017-08-07 13:30:16

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

我想使用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上会显示示例,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

Django本质上是同步的,因此它本身是/不可能实现web套接字。然而django的核心开发人员之一(我相信它的Andrew Goodwin,如果它的错误,请纠正我!)为此目的开发了channels。频道尽管应该是django的一部分,现在它是一个django项目,但与框架分开。 刚出来时,我已经尝试了很长一段时间的频道。这是一件很好的小事,尽管你应该知道它的哲学。

  

频道被故意设计为偏好低延迟(目标是少数   毫秒)和保证交付的高吞吐量,这   与某些消息队列设计不匹配。

     

有些功能,例如保证订阅消息,可以选择加入   它们会带来性能损失,但会使其更像消息队列。

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