如何从使用者类别之外发送channel_session数据

时间:2018-07-12 05:03:42

标签: django websocket django-rest-framework django-channels

从消费者类之外的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 个答案:

答案 0 :(得分: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)