Ответ 1
Вот что я буду делать (я действительно подумываю о написании этой библиотеки после просмотра вашего вопроса, мне тоже нужно):
Создайте модуль taskpool
со следующим API.
client_id, token = taskpool.get()
# Setup a heartbeat in the client JS, maybe every minute.
# Also call this every time the client indicates presence
taskpool.ping(client_id)
taskpool.release(client_id)
Реализация:
- Сохраните
client_id
иtoken
в сущности со статусом, указывающим, будет ли он использоваться, время последнего пинга и время создания. Пусть ключclient_id
. Также рассмотрите возможность использования NDB. Бесплатная memcaching.
get()
проверяет наличие неиспользуемых токенов и возвращает один, если он находит его. В противном случае создайте новый, сохраните и верните его.
ping()
обновляет время последнего пинга для этого токена. Вместо опроса пусть клиент посылает пингу каждый [биение сердца].
release()
отмечает токен как неиспользуемый.
Запустите задачу /cron каждые [сердцебиение] секунд, чтобы найти маркеры, которые не получили пинг через некоторое время, и установите их как неиспользуемые.
Когда клиенты сообщают о закрытом токене, выполните get()
.
Имейте в виду, что потеря безопасности является побочным продуктом любого типа пула токенов. Если вредоносный клиент держится за токен и перестает посылать пульс, он может впоследствии быть в состоянии прослушивать сообщения, передаваемые новому клиенту после повторного назначения токена. Это не проблема, если вы находитесь на полностью открытом сайте, но помните об этом.
Я обновлю этот ответ, если и когда я напишу это как библиотеку.