Что было бы лучше в Java для сетей? UDP или TCP? - PullRequest
0 голосов
/ 08 февраля 2011

Что следует использовать для mmo игры в java.UDP или TCP?И почему?TCP является отношением точка-точка и передает каждый пакет, в то время как UDP не имеет отношения точка-точка и может отбрасывать пакеты, что приводит к задержке.Какой из них лучше использовать в этом сценарии?

Ответы [ 5 ]

3 голосов
/ 08 февраля 2011

Ответ зависит не от языка, а от требований игры.

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

Если вам нужен ответ в режиме реального времени с минимальной задержкой (и вышеуказанные проблемы решены), вам также следует использовать UDP.

В противном случае вам следует использовать TCP.

2 голосов
/ 08 февраля 2011

Неважно, является ли это Java или нет, TCP и UDP имеют те же преимущества и недостатки, которые не зависят от языка.

Но чаще всего это сводится к одному основному вопросу проектирования:что должно произойти, когда пакет отброшен?

  1. Притворись, что этого не произошло.Это территория UDP.
  2. Подождите, пока пакет будет отправлен повторно.Именно здесь следует использовать TCP.

Ни один из подходов не является правильным или неправильным сам по себе, оба вызовут проблемы в вашей игре, но на этот вопрос вы должны сначала ответить.

1 голос
/ 08 февраля 2011

См. Этот вопрос:

Android игры UDP / TCP?

0 голосов
/ 09 февраля 2011

Мой опыт работы с UDP и TCP выглядит следующим образом:

  • UDP значительно быстрее . мы говорим на 2 порядка.
  • В проводных сетях потеря пакетов UDP составляет менее 1%
  • В беспроводной сети потеря пакетов UDP может легко достигать 80%, а физическое расстояние до маршрутизатора имеет значение: вы потеряете 20% пакетов с расстояния в фут и 50% с расстояния в 20 футов.

Так что UDP хорош для несущественных вещей. Например, если в вашей игре бегают 2 чувака, и игрок A получает текущие координаты и скорость игрока B через UDP каждые 100 миллисекунд, игрок A может некоторое время экстраполировать, не уходя слишком далеко. Если, с другой стороны, у игрока А есть фулл-хаус, а у игрока Б - флеш-рояль, ситуация другая.

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

0 голосов
/ 08 февраля 2011

Вопрос на самом деле не связан с Java. UDP-дейтаграммы не гарантированы для достижения пункта назначения, TCP-дейтаграммы есть. Последовательные дейтаграммы UDP могут также достигать своих мест назначения не по порядку. Например, DNS основан на UDP, потому что запросы и ответы принимают только одну дейтаграмму. Если вам нужна надежность и вы не хотите осуществлять повторные попытки. TCP ваш выбор. В настоящее время вычислительные затраты минимальны, так что я не думаю, что от использования UDP можно ожидать большого прироста производительности.

...