如何从消费者类外部发送 channel_session 数据

Posted

技术标签:

【中文标题】如何从消费者类外部发送 channel_session 数据【英文标题】:How to send channel_session data from outside the consumer class 【发布时间】:2018-07-12 05:03:42 【问题描述】:

我在从消费者类之外的 channel_session 发送数据时遇到问题。

我的消费者是这样的:-

class myconsumer(AsyncWebsocketConsumer):
    #all init connect function

    def subscribe(self):
        self.channel_Session = payload['data']

    #some other functions

现在的问题是,我想通过一个称为线程的异步函数发送这个 self.channel_session。

async def sendData():
    while True:
        #send data
        await asyio.sleep(5)

class thread(multiprocess.Process):
     try:
         loop = asyncio.bew_event_loop()
     except Exception as e:
          loop = asyncio.get_event_loop()
     loop.run_until_complete(sendData())

此线程在启动服务器时启动。

问题

我找不到发送通道会话的方法

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

首先使用get_channel_layer()获取与redis通信的活动层,然后调用group_send调用type参数指定的消费者方法。

from channels.layers import get_channel_layer

async def sendData():
    channel_layer = get_channel_layer()
    while True:
        await channel_layer.group_send(
            << your_group_name_here >>,
            
                'type': 'subscribe',
                'message': 'custom message'
            
        )
        await asyncio.sleep(5)

【讨论】:

以上是关于如何从消费者类外部发送 channel_session 数据的主要内容,如果未能解决你的问题,请参考以下文章

使用来自外部Consumer类的Django Channels发送消息

ATS缓存数据结构

将数据发送到 Django 通道

具有消息队列的生产者,使用者和处理者

如何从外部附件异步发送和接收数据

Django 频道:将表单数据传递给消费者