Задать вопрос
@Xeon2441

Быстрая передача данных клиент-сервер?

Приложение кроссплатформенное. На данный момент все делаю через tcp. Недавно подумал, а есть ли что-то быстрее tcp сокета? Например как работает World Of Tanks, ведь у них все считается на сервере? Дело в том, что мы собираемся передавать огромное количество информации и нам очень важна скорость передачи данных. От этого будет зависеть плавность работы приложения (в update применение позиций с сервера). Такие игры, как World Of Tanks, Dota 2 и различные MMORPG вроде отлично справились с данной проблемой.
  • Вопрос задан
  • 5040 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 2
benbor
@benbor
Помог ответ - не забудь лайкнуть
Есть такое понятие, как уровни OSI https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D...
Чем уровень выше, тем проще как разработчику, но работает медленно. Чем ниже, тем сложнее разработчику, зато работает быстрее.
WOT как и большинство онлайн игр работает на UDP.
"Различные MMORPG " отлично справились с проблемой передачи данных не только благодаря протоколу передачи данных. Есть еще куча технологий и алгоритмов которые использовались при разработке.
Например предсказания. Если от игрока пришел пакет, что его персонаж бежит вверх, то не стоит через 1/24 секунды (один кадр) останавливать персонажа, не дождавшись следующего пакета. Скорее всего следующий кадр его персонаж будет бежать дальше.
И еще, не стоит "передавать огромное кол-во данных". Необходимо передавать только то, что необходимо. Например, анимация персонажей, зачем каждому игроку передавать информацию о замахивании топором, если можно передать один байт, который соответствует типу "сейчас_персонаж_машет_топором". Это очень просто наблюдать на примерах существующих MMORPG когда у Вас пропадает интернет. Все персонажи залипают на текущей анимации
Андрей При любом качестве связи UDP быстрее.
Ответ написан
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
Смотрите. Подумайте, что будет с вашим приложением, если потеряются хотя бы половина пакетов. Если всё плохо, то TCP/IP. Если вполне себе приемлемо, то UDP/IP.

Вообще, лучше не думайте, что UDP так хорош. Он банально неудобный. Пакеты имеют размер. К тому же, он целиком и полностью асинхронный - нередка ситуация, когда один пакет пропускает пару других. Вместо плавности можете получить лишь дёрганье. В то же время, при достаточно хорошем расположении, TCP/IP будет работать вполне себе адекватно. И зависания будут именно зависанием, а не каким-то странным подёргиванием. А если уж приложение станет популярным, к Вам уже провайдеры проведут оптический линк.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos Куратор тега Разработка игр
1) Оптимизировать то, что вы передаете. Вот это "огромное количество информации" сделать как можно меньше.
2) Сокеты.
Ответ написан
TCP - протокол, ориентированный на соединение.
При уже установленном соединении и идеальном канале связи его быстродействие будет равно UDP.
В случае несоблюдения какого либо из этих 2-х условий - собственная обработка событий поверх UDP будет быстрее (не зря все-таки IP-телефония, так критичная к задержкам, поверх UDP идет), но однако и значительно затратнее для Вас как разработчика.
Ответ написан
@mamkaololosha
Используйте UDP. Он не просит ответ и можно просто завалить пользователя данными и не париться, что они потеряются.
Посмотрите Cube или Cube 2: Sauerbraten.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы