Сообщение от pax
Я не знаю, полностью ли ты понимаешь какая технология выбрана:
|
Это не с технологией связано, а архитектурой.
Сообщение от pax
1. Данные на сервере хранятся с помощью php+mysql.
|
Это ок. Запрос с даже 50 ID по Primary Key с IN оператором - очень быстрая операция.
Сообщение от pax
2. При заходе в игру клиент подключается к лобби в облаке фотона, в котором на сервере вообще никакой логики нельзя добавить.
|
Это при заходе в онлайн в саму игру, а не конкретный матч?
То есть на сервере нету никакой области логики "при коннекте клиента"? Ни при соединении ни при отключении?
Сообщение от pax
3. Сервера независимые.
|
Это ничего не меняет.
Если #2 всё же возможен. Тогда всё что нужно - это отослать простой HTTP запрос на PHP мелкий скрипт (только игровой сервер может слать естественно), или если игровой сервер имеет прямой доступ к бд - так даже лучше естественно. При подсоединении к бд - создаём запись: "user_id, 0", где 0 - это id матча. Т.к. мы в лобби он 0.
Далее когда начинается матч (подсоединяемся к игровой инстанции), обновляем запись, ставим id матча заместо 0.
По окончанию матча - обнуляем снова.
При выходе из игры (полностью), трём запись.
Если нету возможностей оперировать данными на уровне lobby, тогда делаем только для матчей. Ну или если уж совсем хочется, можно сделать и простой "ping-pong" с php скриптом, раз в минуту, от клиента.
И иметь процесс, каждые например 3 минуты, что будет тереть все записи с timestamp старее 3 минут.
Индексировать по timestamp естественно тоже нужно, чтобы скорость поиска была приемлемой.
Два варианта, оба вполне реальны. Первый естественно лучше. Но как понимаю нету центрального "Мастера", следственно с фотоном такое будет не просто и прийдётся извращаться, как во втором варианте.
Сообщение от pax
Ты предлагаешь записывать в базу через php/mysql при создании боев подключаемых к ним пользователей. И с помощью того-же php/mysql запрашивать эти данные при каждом обновлении списка комнат?
|
Записывать данные в бд при создании матча - да.
Но вот получение списка, я бы минимализировал на стороне клиента по времени. Не каждое обновление списка, а по таймеру. Чаще чем каждые 3 минуты клиенту не нужен обновлённый список кто в онлайне.
Сообщение от pax
Тут ситуация такая - клиент может выйти ничего не сказав php серверу об этом. И игрок останется в базе в какой-то комнате. Ну и остальные "преимущества" с этим связанные.
|
Поэтому нужен скрипт на сервере для сборки старых данных - это нормальная процедура если у тебя нету ответственной точки контроля данного списка и зависимостей записей с источником (матч серверами).