В настоящее время я делаю MMORPG-игру, основанную на пошаговых играх. Клиент должен работать на Android. Теперь мой друг занимается графикой, а я занимаюсь игровыми классами (игрок, оружие и т. Д.). Теперь, если борьба начата, классами можно управлять с помощью интерфейсов (фактически для моего партнера это похоже на работу с чистыми интерфейсами, ему не нужен доступ к классам реализации).
Теперь нам нужно представить игровой сервер для нескольких игроков. И возникает несколько очень важных вопросов:
1) Должен ли я полностью скопировать игровую модель на сервер, не оставляя классов на клиенте, или лучше иметь 2 копии модели - 1 на сервере и 1 на устройстве и выполнять периодическую синхронизацию между ними?
2) Какой способ подключения выбрать между клиентом и сервером (клиент в поле зрения - телефон Android)? Что касается сервера - я обращаюсь к Java, потому что у меня есть некоторый опыт работы с ним. Но теперь возникает вопрос - лучше ли использовать сокеты для этой задачи, или я могу использовать службы REST, или даже возможно как-то подключить его к серверу Java EE, что, с моей точки зрения, здорово, потому что это убирает много программирования осложнение? Несмотря на то, что игра многопользовательская, она пошаговая, поэтому обновлять ее не нужно очень часто.
3) Как насчет потоков? Должен ли каждый клиент иметь свой собственный поток (в случае сокетов)?
4) Существуют ли какие-либо книги по программированию серверных игр REAL MMORPG ???
источник
Договорились с Николаем, не копируйте все. Отправьте как можно меньше данных. Вы можете иметь одинаковые классы (представляющие только модель данных, а не другие активы) на клиенте и сервере, но не отправлять их по сети. Вы хотите сериализовать их на сервере и десериализовать на клиенте. Клиент должен отправлять только команды на сервер.
Вы планируете пошаговую MMORPG (пока не знаю, как это будет работать). Так что скорость не является большой проблемой. Вы можете использовать любой вид услуг, REST может быть хорошим, это просто. Обычно MMORPG используют UDP (небезопасный, меньший, более быстрый) для таких вещей, как обновления движения, когда потерянный пакет или два не имеет значения, и TCP (безопасный, накладные расходы) для безопасной связи. В большинстве игр, вероятно, используется какой-то зашифрованный, сжатый пользовательский протокол по UDP и TCP, чтобы сделать его быстрым и трудным для взлома.
Обычно вы хотите иметь пул потоков. Каждый поток из пула обслуживает один запрос, а затем перерабатывается. Если у вас недостаточно потоков, вы можете рассмотреть возможность блокировки или выделения большего количества потоков.
Николай уже гуглил это для тебя ...
источник