2017-01-23 2 views
0

Игра im development в настоящее время использует ServerSocket и Socket для обеспечения многопользовательской игры. Он много отстает, когда он не запускается локально, поэтому мне интересно, должен ли я переделать многопользовательскую структуру для отправки как через TCP (ServerSocket, Socket), так и UDP (DatagramSocket). В настоящее время, как упоминалось, я использую только TCP, и он отправляет только 60 пакетов в секунду (30 получателей и 30 отправленных), когда они не выполняются локально.Мультиплеерные игры Сетевое взаимодействие

Информация, которая отправляется между сервером и клиентом:
Движение, торговля, ItemUsage, EnvironmentDetails и многое другое.

Так что мои вопросы:

Будет ли это сделать огромную разницу, если я и использовал TCP и UDP, а не только TCP?

Если я перешел на TCP и UDP, что мне следует отправлять в каждом протоколе?

Заранее благодарен!

Edit:

Клиент:

Instancing: this.out = new ObjectOutputStream(new BufferedOutputStream(this.requestSocket.getOutputStream())); this.in = new ObjectInputStream(new BufferedInputStream(this.requestSocket.getInputStream()));

Отправка:

this.out.writeObject(temp.toString()); this.out.flush(); Temp является JSONObject

Сервер:

Instancing: this.out = new ObjectOutputStream(new BufferedOutputStream(c.getOutputStream())); this.out.flush(); this.in = new ObjectInputStream(new BufferedInputStream(c.getInputStream()));

Отправка: this.out.writeObject(temp.toString()); this.out.flush(); Temp является JSONObject

+0

UDP может отбрасывать пакеты, поэтому вы можете потерять данные. Будет ли это негативно влиять на вашу игру? Я мог видеть, что это может быть проблемой. – Carcigenicate

+0

Ну, UDP не использует проверку ошибок как таковую, поэтому она должна быть более быстрой в теории, если вам не нужен точный поток информации. – Mena

+0

Также возможно, что он отстает от вашего кода, в зависимости от того, как ваш код связи обрабатывает вещи. Вы очищаете свои потоки? В каком формате вы отправляете данные и т. Д. – Kayaman

ответ

0

Будет ли это сделать огромную разницу, если я и использовал TCP и UDP, а не только TCP?

Да. Вы заметите гораздо лучшую производительность, если вы используете UDP для обновления состояния игры, потому что проверка данных не происходит. Пакет UDP запускается и затем забывается.

Кроме того, чтобы увеличить производительность, ограничьте объем данных, которые вы отправляете. Если вы отправляете JSON, каждый символ - один полный байт. 30 обновлений второй могут быть чрезмерными, потому что это обновление каждые 33,3 миллисекунды. Чтобы представить это в перспективе, монитор с частотой 60 Гц будет обновляться каждые 16,7 миллисекунды.

Если я перешел на TCP и UDP, что мне следует отправлять в каждом протоколе?

TCP обычно используется, когда вам нужно убедиться, что ваши данные попадают на сервер или клиент.UDP используется, когда вы хотите скорость, и можете иметь дело с отброшенными пакетами. Если вы используете UDP, вам нужно будет учитывать потенциальную потерю пакетов в вашем коде.