Показать сообщение отдельно
Старый 17.06.2014, 14:39   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Результаты совместной "игры"

Думаю тут PHP "не причем".
По объему данных, какие прогнозы - сколько займет просчет?

Стоит ли обрабатывать это дело в PHP, или использовать отдельный процесс, который тупо заточен на обработку именно этих данных для генерации данных о завершении игры.
Такой вариант имеет немного больше свободы технически, но при этом имеет чуток больше проблем тоже.

Делать запрос в PHP и блокировать его до тех пор пока не получишь результаты - немного "грубо". Если есть WS транспорт, то используй его, если нету, тогда делай лучше переодические запросы.

По завершению игры, используй SETNX, где key будет ID игровой сессии и value будет 1. Это атомарный метод создает запись если она не создана и возвращает 1, если запись уже есть возвратит 0.
Таким образом ты будешь "уверен" что только один процесс начал обработку. Также если обработка может зафейлиться, то нужно делать таймаут на этот key и "кто-то" должен проверять не обработанные игры, и обрабатывать их.

При этом клиенты пусть запрашивают данные с другого endpoint'а (/games/.../results), которые тупо будут грузить данные из таблицы games_results, если данные не существуют, проверять если в redis'е есть запись (которую ранее создали), если есть, значит данные обрабатываются, если нету - значит таких результатов вообще нету.

Если данные обрабатываются, то пусть /results возвратит "данные обрабатываются", и клиент просто будет запрашивать их каждые 500мс (например). Не забудь timeout на записи в redis'е как уже упомянул ранее, чтобы если обработка результатов зафейлит, хотя бы клиенты не застопорятся в ожидании результатов.


Естественно подобные вещи лучше делать имея messaging сервер, который является обменной точкой разных сообщений, например о результатах игры, или приглашении кого-то на рейс и т.п.
Такой сервер используется для обмена разного рода сообщениями и нотификациями.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (18.06.2014)