Django Channels_to_sync(channel_layer.group_send())不工作

bejyjqdl  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(125)
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通道文档,代码没有变化。

b5lpy0ml

b5lpy0ml1#

下面是我如何得到我的答案。我们不能创建自定义频道名称,所以我创建了现有的频道名称组

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工作正常.

相关问题