Django каналов создает один экземпляр вашего класса Consumer для каждого открытого подключения к веб-сокету.
Идея group_send
состоит в том, чтобы вызвать ту функцию, которая соответствует вашему значению type
. Эта функция вызывается для каждого экземпляра потребителя, который подписался (group_add
) на эту группу.
Если у вас есть работа, которая не зависит от отдельных подключений (например, идентификатор пользователя может отличаться для каждого подключения), тогда выполните это перед вашим group_send
сообщением.
Так что, если вам нужно запросить ваш db, сделайте это до вашего group_send
, затем сериализуйте результаты и отправьте их через уровень канала как часть вашего сообщения group_send
.
Однако, если ваш запрос к БД должен учитывать подписанного пользователя (то есть отфильтровать информацию, которую им не разрешено видеть), вам нужно сделать это в обработчике chat_message
, и он будет вызываться для каждого подписанного соединения . В качестве альтернативы вы можете выполнить запрос перед group_send
, который предоставляет необходимую информацию, чтобы в вашем chat_message
вы могли просто проверить сообщение, чтобы определить, можно ли его отправить пользователю.