Я пытаюсь реализовать фонового рабочего, который в конечном итоге прочитает файл журнала и отправит его обратно через веб-сокет клиенту. В настоящее время сообщение не доставляется работнику.
Я использую InMemoryChannelLayer, работает ли это с использованием этого слоя по умолчанию, или мне придется вместо этого использовать Redis?
#consumer
channel_layer = get_channel_layer()
class LogFileConsumer(AsyncConsumer):
async def read_file(self, message):
print(message)
await asyncio.sleep(2)
class LogConsumer(AsyncWebsocketConsumer):
# group_send code, not shown, is routed back fine to the client browser
async def connect(self):
await self.accept()
await channel_layer.send('read-file',{
'type': 'read.file',
'id':'start',
})
#routing
application = ProtocolTypeRouter({
'websocket': AuthMiddlewareStack(
URLRouter(
log_reader.routing.websocket_urlpatterns
)
),
'channel': ChannelNameRouter({
'read-file': LogFileConsumer,
}),
})
Затем я запускаю воркера следующим образом:
$ python manage.py runworker read-file
Running worker for channels ['read-file']
Я ожидал бы увидеть сообщение, напечатанное на консоли, но ничего не возвращается.
Остальной код, получение сообщения из браузера через веб-сокет и отправка обратно клиенту с помощью group_send отлично работает. Я уверен, что где-то есть глупая ошибка, просто не могу ее обнаружить.
Спасибо