class AllEventConsumer(WebsocketConsumer):
def connect(self):
self.room_name = str(self.scope['url_route']['kwargs']['user_id'])
self.room_group_name = 'all_event_'+self.room_name
print('connect')
print(self.room_group_name)
async_to_sync(self.channel_layer.group_add(
self.room_group_name,
self.room_name
))
async_to_sync(self.channel_layer.group_send(
self.room_group_name , {
'type': 'update.list',
'value': 'Value'
}
))
self.accept()
event = Synopsis_Event.give_all_events(self.room_name)
self.send(text_data=json.dumps({
'room_id': self.room_group_name,
'payload': event
}))
def update_list(self, event):
print('inside update_list')
print(event)
data = json.loads(event['value'])
self.send(text_data=json.dumps({
'payload': data
}))
def disconnect(self, close_code):
async_to_sync(self.channel_layer.group_discard)(
self.room_name, self.room_group_name
)
self.disconnect(close_code)
def receive(self, text_data=None, bytes_data = None):
print('DEF')
print(type(json.loads(text_data)))
async_to_sync(self.channel_layer.group_send)(
self.room_group_name , {
"type": "update.list",
"value": text_data
}
)
这是我从消费者中编写的 group_send 代码,它不起作用,所以我添加它来连接只是为了测试它是否被触发。但它不起作用
尝试使用 Django 通道文档,代码没有变化。
这就是我得到答案的方式。 我们无法创建自定义频道名称,因此我使用现有频道名称创建了组
class AllEventConsumer(WebsocketConsumer):
def connect(self):
self.room_name = str(self.scope['url_route']['kwargs']['user_id'])
self.room_group_name = 'all_event_'+self.room_name
print('connect')
print(self.channel_name)
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
temp_data = {
'type': 'update_list',
'value': 'Value'
}
async_to_sync(self.accept())
async_to_sync(self.channel_layer.group_send)(
self.room_group_name ,
temp_data
)
event = Synopsis_Event.give_all_events(self.room_name)
self.send(text_data=json.dumps({
'room_id': self.room_group_name,
'payload': event
}))
def update_list(self, event):
print('inside update_list')
print(event)
# data = json.loads(event['value'])
self.send(text_data=json.dumps({
'payload': event
}))
def disconnect(self, close_code):
async_to_sync(self.channel_layer.group_discard)(
self.room_name, self.room_group_name
)
self.disconnect(close_code)
def receive(self, text_data=None, bytes_data = None):
print('DEF')
print(type(json.loads(text_data)))
async_to_sync(self.channel_layer.group_send)(
self.room_group_name , {
"type": "update.list",
"value": text_data
}
)
在上面的代码连接中,我从 self.room_name 更改为 self.channel_name ,其工作完美。它也可以与 AsyncWebsocketConsumer 一起正常工作。