Я пытаюсь познакомиться с Django channels
и web-sockets
.У меня есть задача - постоянно передавать данные тому, кто подключается к каналу.
В настоящее время это кусок кода из официального руководства с некоторыми улучшениями.
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_group_name = f'chat_{self.room_name}'
if not hasattr(self, 'vehicle'):
# this produses constant data stream
self.vehicle = connect('/dev/ttyACM0', wait_ready=True, rate=4)
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
await self.accept()
# this part does not work!
await self.send(text_data=json.dumps({
'message': {
'mess': "Hi",
'yaw': self.vehicle._yaw,
'pitch': self.vehicle._pitch,
'roll': self.vehicle._roll,
}
}))
async def disconnect(self, close_code):
# Leave room group
await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
)
Но теперь этот код отключается, не показывая ничего спереди.Я нашел этот ответ , но этот цикл также не работает.
Если я переместу этот цикл while в отдельный метод и вызову его из метода receive
(который я пока не показываю здесь для краткости) - он работает, но новый пользователь при входе в канал - не видитсообщения из цикла while, но после перезапуска цикла - сообщения отправляются всем пользователям.
Как сделать поток данных доступным для любого пользователя в любой момент времени, когда он входит в канал?