Redis 在 Django Channels 中起到什么作用

mol*_*hui 5 django redis django-channels

最近一直在用make的django channels支持websocket protocol,我用的是微服务的方式,其他组件通过django通道连接,但是我要Consumer class为每个连接写一个接收和处理,比如class Consumer(AsyncWebsocketConsumer):里面还是用的redis,指出这个部分是官方文档作为通道层存储,所以是作为消息队列缓存或者其他常用功能存在吗?

我写信是为了找出每个连接是否有一个 Consumer ,以及我是否可以将其视为消息队列

但是,我没有找到相关材料来支持我的观点。

你能告诉我我的理解是否正确吗?真诚地希望您能提供相关资料以供参考,无论正确与否。

Tim*_*ayy 5

这取决于您如何使用它。django-channel_layers 中 redis 的主要目的是存储不同消费者实例相互通信所需的必要信息。

例如,在频道文档的教程部分,很清楚地使用Redis作为频道名称和组名称的存储层。它们存储在 Redis 中,以便可以从任何消费者实例访问它们。例如,如果我创建一个名为“users”的组,然后向其中添加 3 个不同的频道名称,则此信息将存储在 Redis 中。现在,每当我想将数据发送到组中的通道时,我可以简单地从我的消费者中引用该组,Django 通道将自动检索存储在 Redis 中该组下的通道名称。

另一方面,如果您想以非常规的方式使用消费者,即作为后台工作者,那么 Redis 就变成了消息队列。那是因为当您发送的消息包含要由后台工作人员之一(“消耗”任务的消费者)完成的任务时,这些消息必须存储在某处,以便后台工作人员可以在完成其他任务时检索它们.