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);
我正在尝试发送 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);