2016-06-16 5 views
-3

У меня есть вопрос, на который нужно ответить. Мне интересно, какая разница в производительности, если я сериализую объект и отправляю его, или если я дамлю необходимые переменные и восстановит состояние игры на сервере. Причина, по которой мне любопытно, заключается в том, что я создаю игру, в которой физика обрабатывается как клиентом, так и сервером, и чтобы она работала правильно (и никто не взламывает), я хочу знать, какой будет лучший курс действия.Получение текущего состояния игры и отправка его через Интернет

Дополнительная информация: Его 2D-игра, написанная на Java с помощью Libgdx api, в настоящее время я использую netty в качестве моего сетевого сервера.

Я заметки здесь: http://gafferongames.com/networked-physics/the-physics-simulation/

+1

Это очень широкий предмет и, вероятно, вне темы для StackOverflow. Простой ответ заключается в том, чтобы написать код таким образом, который лучше всего подходит для вас, а затем оптимизировать позже, если окажется проблема с производительностью. Обратите внимание, что _ «сериализуйте объект» _ и _ «выгружайте необходимые переменные и восстанавливайте состояние игры на сервере». Оба означают, по сути, одно и то же, но в первом случае вы используете встроенную сериализацию, а во втором вы пишете свои собственный код сериализации. –

+0

Вы действительно поднимаете действительные баллы, это по сути то же самое, и я был очень широк в формулировке. Мне было интересно, не приведет ли сериализация к узкому месту или к чему-то еще, потому что раньше я никогда с ним не работал. Но я попробую. –

ответ

1

Как сказал Джим Гаррисон, это очень широкий вопрос, и вы должны написать свой код, а затем оптимизировать его позже, но я дам вам несколько советов относительно одна и та же.

Вы можете отправлять данные любым удобным вам способом, и изначально это вопрос того, что вы предпочитаете больше. Вы можете начать с использования Serializing Java-объектов и отправки их по сети. Для сериализации данных я бы посоветовал вам использовать некоторую библиотеку, такую ​​как Kryo, которая очень быстрая по сравнению с встроенной сериализацией Java. Следуйте за link, чтобы увидеть производительность различных сериализаторов jvm.

Для начала вы можете использовать Kryonet библиотеку для написания кода сети. Kryonet использует сериализатор Kryo для сериализации ваших Java-объектов и отправки их по сети. Это очень легко использовать.

Позже вы можете перейти к сетевой библиотеке под названием Netty, которая предоставляет вам возможность создавать собственные протоколы. Тогда, как вы сказали, вы можете написать протокол, который вам больше всего подходит. Пара Netty с Google's Protobuf, и вы получите действительно хорошую сетевую библиотеку с верхним сериализатором. Я также использую их вместе, и мне нравится, как я могу определить свои пользовательские сообщения, используя protobuf, и встроенную поддержку protobuf, которую предоставляет netty.

И, наконец, что касается взлома вашей игры, это должен быть совершенно другой вопрос. Как только ваша игра станет успешной, и вы почувствуете, что люди хотели бы взломать вашу игру, вы бы уже получили достаточно знаний, чтобы понять, как избежать этого :)

Удачи! Я надеюсь, что ответ указал вам в правильном направлении.

+0

Я никогда не слышал о Protobuf, но я рассмотрю его, потому что я уже использую Netty для работы в сети. –