Как сказал Джим Гаррисон, это очень широкий вопрос, и вы должны написать свой код, а затем оптимизировать его позже, но я дам вам несколько советов относительно одна и та же.
Вы можете отправлять данные любым удобным вам способом, и изначально это вопрос того, что вы предпочитаете больше. Вы можете начать с использования Serializing Java-объектов и отправки их по сети. Для сериализации данных я бы посоветовал вам использовать некоторую библиотеку, такую как Kryo, которая очень быстрая по сравнению с встроенной сериализацией Java. Следуйте за link, чтобы увидеть производительность различных сериализаторов jvm.
Для начала вы можете использовать Kryonet библиотеку для написания кода сети. Kryonet использует сериализатор Kryo для сериализации ваших Java-объектов и отправки их по сети. Это очень легко использовать.
Позже вы можете перейти к сетевой библиотеке под названием Netty, которая предоставляет вам возможность создавать собственные протоколы. Тогда, как вы сказали, вы можете написать протокол, который вам больше всего подходит. Пара Netty с Google's Protobuf, и вы получите действительно хорошую сетевую библиотеку с верхним сериализатором. Я также использую их вместе, и мне нравится, как я могу определить свои пользовательские сообщения, используя protobuf, и встроенную поддержку protobuf, которую предоставляет netty.
И, наконец, что касается взлома вашей игры, это должен быть совершенно другой вопрос. Как только ваша игра станет успешной, и вы почувствуете, что люди хотели бы взломать вашу игру, вы бы уже получили достаточно знаний, чтобы понять, как избежать этого :)
Удачи! Я надеюсь, что ответ указал вам в правильном направлении.
Это очень широкий предмет и, вероятно, вне темы для StackOverflow. Простой ответ заключается в том, чтобы написать код таким образом, который лучше всего подходит для вас, а затем оптимизировать позже, если окажется проблема с производительностью. Обратите внимание, что _ «сериализуйте объект» _ и _ «выгружайте необходимые переменные и восстанавливайте состояние игры на сервере». Оба означают, по сути, одно и то же, но в первом случае вы используете встроенную сериализацию, а во втором вы пишете свои собственный код сериализации. –
Вы действительно поднимаете действительные баллы, это по сути то же самое, и я был очень широк в формулировке. Мне было интересно, не приведет ли сериализация к узкому месту или к чему-то еще, потому что раньше я никогда с ним не работал. Но я попробую. –