Как выполнить асинхронную итерацию по очереди клиентов websocket в каналах Django, используя redis? - PullRequest
0 голосов
/ 23 октября 2018

Рассмотрим следующий сценарий:

01) PHP-сервер с PostgreSQL aka PHP

02) Python с каналами Django 2 с Redis aka PYTHON

03) Мобильные клиенты Websocket aka Клиент

  1. PYTHON имеет несколько сохраненных (в памяти) соединений клиенты через веб-сокеты.

  2. PHP открывает соединение через веб-сокет с PYTHON и спрашивает: дайте мне список ближайших клиентов . PYTHON сохранить (в памяти) это соединение с PHP

  3. PYTHON организовать этих клиентов в очереди и хранить в REDIS .После очереди готовности PYTHON предлагает это задание (данные из PHP ) первому клиенту очереди.

  4. Если клиент ответ yes, PYTHON получает ответ, затем уведомляет PHP и процесс завершен.Если client ответит «нет», PYTHON получит следующего клиента в очереди. Вот моя проблема : если клиент не отвечает?или отключить?Мне нужно время ожидания и найти способ перейти к следующему пункту в очереди.Это вопрос?Как открыть очередь с недоступным клиентом и предложить работу следующему элементу?

Я установил внешний Python для прослушивания __keyspace@0__ и __keyevents@0__(истекает) с кодом while True: ... но это довольно запутанно.Я также думал с channel_layer и groups ... но управление циклом (потоком) не должно быть заблокировано для клиентов, должно быть заблокировано только для PYTHON .

Какой лучший подход?Джанго Каналы рабочий?независимый паб / суб-клиент?Установить паб / саб в работнике?третий сервис?Список событий с истекшим сроком действия в channel_layer?Я здесь совершенно слепой

...