Вопрос можно разделить на два:
- как обновлять протокол взаимодействия?
- как обновлять логику игры?
С протоколом всё просто. Есть много вариантов, я предпочитаю такой подход:
- Для каждого метода API вводится версия, которую явно указывает клиент.
- Может поддерживается несколько версий одного метода.
- Есть деструктивные изменения API (увеличивают версию) и недеструктивные (не увеличивают версию).
- Недеструктивные - это добавление новых параметров в ответ или опциональных в запрос, без изменения логики реакции сервера на получение старых параметров.
- Деструктивные: удаление, переименование, изменение семантики или формата данных в ответе, изменение логики реакции сервера.
- Когда надо сделать деструктивное изменение, старый метод оставляется в поддержке, пока все клиенты (или нужный их процент) не обновится.
С логикой сложнее. Но тоже есть варианты:
- Самый простой - принудительное обновление. Выкатили новый сервер, все должны обновить клиент. Наиболее просто в поддержке, если не делается топовый продукт, то лучше так и поступать - сэкономит огромное количество ресурсов. Но сесть нюансы, например, сложно добиться одновременного выхода мобильных клиентов на разных платформах (Google Play, App Store) из-за особенностей ревью, договорённостей по фичерингам, etc.
- Запускать несколько версий сервера: старую и новую. Если игрок обновил клиент и поиграл на новой версии, старым клиентом он уже не подключится. Тут надо грамотно распределять клиентов по серверам и озаботиться непересечением разных версий игры. Например, нельзя чтобы клиенты с разными версиями играли совместно (PvP, турниры, etc).