Django Настройка каналов для имени канала - PullRequest
0 голосов
/ 17 января 2020

Я использую Django каналы и могу правильно подключиться и отправить сообщение с предоставленным встроенным именем канала. Мне интересно, есть ли способ изменить и зарегистрировать пользовательское имя канала в подключении к веб-сокету. Я попытался изменить его, но channel_layer уже сохранил встроенное имя_канала, и я не могу отправить сообщение.

Это предоставленный тестовый класс

class TestWebSocket(AsyncWebsocketConsumer): 
   async def connect(self):
        self.channel_name = "custom.channelname.UNIQUE"
        await self.accept()

   async def test_message(self, event):
        await self.send(text_data=json.dumps({
            'message': event['message']
        }))

Вот как я могу отправить сообщение:

async_to_sync(channel_layer.send)('custom.channelname.UNIQUE',
                                  {'type': 'test.message', 'message': 'dfdsdsf'})

Я читаю документацию, и она хранит channel_name внутри db , но каждый раз, когда я выполняю соединение, это имя будет меняться. Я хочу избежать затопления db с вызовами обновления. Вот почему я пытаюсь заставить свои собственные названия каналов.

Есть способ изменить это или это пустая трата времени?

1 Ответ

0 голосов
/ 24 января 2020

Название канала отменяется слоем вашего канала https://github.com/django/channels/blob/580499752a65bfe4338fe7d87c833dcd5d4a3939/channels/layers.py#L259 https://github.com/django/channels/blob/580499752a65bfe4338fe7d87c833dcd5d4a3939/channels/consumer.py#L46

, поэтому я бы вместо этого предложил использовать group, который вы можете настроить с любым именем.

https://channels.readthedocs.io/en/latest/topics/channel_layers.html#groups

class TestWebSocket(AsyncWebsocketConsumer): 
   async def connect(self):
        await self.channel_layer.group_add(
            "custom.channelname.UNIQUE",
            self.channel_name
        )
        self.groups.append("custom.channelname.UNIQUE") # important otherwise some cleanup does not happened on disconnect.
        await self.accept()

   async def test_message(self, event):
        await self.send(text_data=json.dumps({
            'message': event['message']
        }))


# to send to that group
await channel_layer.group_send(
    "custom.channelname.UNIQUE",
    {"type": "test.message", "message":"Hello!"},
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...