Django 频道 - 无法订阅群组

Django channels - unable to subscribe to groups

我正在尝试发送 consumers.py 信息以显示在 consumers.py 之外的客户端上。

我已经引用了这个之前的问题,但是子进程.group_send.group_add似乎不​​存在,所以我觉得我可能遗漏了什么很简单。

Consumers.py

from channels.generic.websocket import WebsocketConsumer
from asgiref.sync import async_to_sync

class WSConsumer(WebsocketConsumer):
    def connect(self):
        async_to_sync(self.channel_layer.group_add)("appDel", self.channel_name)
        self.accept()

        self.render()

appAlarm.py

def appFunc(csvUpload):
    #csvUpload=pd.read_csv(request.FILES['filename'])
    csvFile = pd.DataFrame(csvUpload)
    colUsernames = csvFile.usernames
    print(colUsernames)

    channel_layer = get_channel_layer()

    for user in colUsernames:
        req = r.get('https://reqres.in/api/users/2')
        print(req)
        t = req.json()
        data = t['data']['email']
        print(user + " " + data)
        
        message = user + " " + data
        async_to_sync(channel_layer.group_send)(
        'appDel',
        {'type': 'render', 'message': message}
    )

它抛出了这个错误:

    async_to_sync(channel_layer.group_send)(
AttributeError: 'NoneType' object has no attribute 'group_send'

并且会在 group_add 将其剥离更多以弄清楚发生了什么时抛出相同的错误,但根据文档 HERE 我觉得这应该有效。

对于以后看到这个的人来说,由于成本问题,我无法在 Windows OS 中使用 redis 甚至 memurai。我最终使用了服务器端事件 (SSE),特别是 django-eventstream,到目前为止,它运行良好,因为我不需要客户端与服务器交互,对于聊天应用程序,这是行不通的。

Eventstream 在 /events/ 处创建端点,客户端可以连接并接收流式 http 响应。

从externalFunc.py发送数据:

send_event('test', 'message', {'text': 'Hello World'})

HTML 页面中的事件侦听器:

var es = new ReconnectingEventSource('/events/');

es.addEventListener('message', function (e) {
    console.log(e.data);

    var source = new EventSource("/events/")

    var para = document.createElement("P");
    const obj = JSON.parse(event.data)
    para.innerText = obj.text;
    document.body.appendChild(para)

}, false);

es.addEventListener('stream-reset', function (e) {
}, false);