Вторник, 05 Июля 2022, 18:56

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Записи участника » programMain [30]
Результаты поиска
programMainДата: Среда, 07 Ноября 2018, 15:42 | Сообщение # 1 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Цитата qazer ()
programMain,
https://gafferongames.com/post/udp_vs_tcp/
Вот тебе аргументы, почему не стоит использовать TCP при отправке критичных ко времени данных.

Никто не говорит, что использовать TCP - плохая идея. Тебе пытаются объяснить, что все подходит для своих задач.

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

НО! Стоит смотреть не на порты которые открыты, а на траффик который через них идет. Положение персонажа в играх с быстрым темпом игры(шутерах например) не будет идти по TCP. Куча других данных, для которых важно, чтобы они были доставлены максимально быстро не будут идти по TCP в реалтайм играх.

p.s.Что касается WoW - она действительно достаточно медленная. Если в игре нормально будет ощущаться задержка в 3-5 RTT, значит тебе подходит TCP. В Wow при пинге 100 из-за TCP и переотправки данных могут происходит задержки до 300-500ms, тогда все забавно подвисает, каст заклинания останавливается. Особенно заметно это бывает по вечерам и со стремным провайдером, когда толпа народу смотрит видосики на ютубе. Но как не странно, даже с такими пиками жить в Wow можно, даже в PvP. В Overwatch такой трюк не пройдет. Такие задержки, даже кратковременные - вызывают неистовое жжение нижней точки, когда из-за них тебя убивают в самый неподходящий момент.

Я это и пытаюсь сказать уже чертову тучу времени... Я писал пиратский сервак для WOW, я знаю что там и как идет). Скажу так, я советую начинающим использовать TCP, в реальных (больших) проектах используют два протокола, хочешь передать данные которые надо защитить, используй TCP, надо просто пульнуть информацией, используй UDP. Но если ты только начинаешь собирать игру, начни с TCP. В процессе если ты видишь, что необходимо ускорить процесс (часто это отпадает при рефакторинге кода), то поставь в той части UDP. Но не нужно использовать везде UDP - потому что "я думаю, что так нужно".

Добавлено (07 Ноября 2018, 15:50)
---------------------------------------------
Ребят, предложение на тест сервака до сих пор актуальна, если кому то нужно по-боевому нагрузить свои серваки - пишите в лс)))

programMainДата: Вторник, 06 Ноября 2018, 23:40 | Сообщение # 2 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Ты думаешь о чем ты говоришь? Смотри, я сказал что UDP это хорошо, но использовать правильно TCP начинающим разработчикам - его полностью хватит. Самые крутые игры от того же близард используют и TCP и UDP. И я не знаю откуда ты берешь свои источники... Но вот тебе список используемых портов TCP и UDP для всех игр близард, взято с их официального сайта. А ты за место того что бы умничать, и тыкать мне на понижение репутации признал бы, что по протоколу TCP тоже работают игры, причем все, причем непосредственно в игровом процессе....

приложение Battle.net от Blizzard TCP - 80, 443, 1119 UDP - 80, 443, 1119
Голосовой чат Blizzard TCP - 80, 443, 1119 UDP - 3478-3479, 5060, 5062, 6250, 12000-64000
Blizzard Downloader TCP - 1119, 1120, 3724, 4000, 6112, 6113, 6114 UDP - 1119, 1120, 3724, 4000, 6112, 6113, 6114
Diablo TCP -6112-6119 UDP - 6112-6119
Diablo II TCP - 6112 и 4000 UDP - отсутствует
Diablo III TCP - 80, 1119 UDP - 1119, 6120
Hearthstone TCP - 1119, 3724 UDP - 1119, 3724
Heroes of the Storm TCP - 80, 443, 1119-1120, 3724, 6113 UDP - 80, 1119-1120, 3478-3479, 3724, 5060, 5062, 6113, 6250, 12000-64000
Overwatch TCP - 1119, 3724, 6113, 80 UDP - 3478-3479, 5060, 5062, 6250, 12000-64000
StarCraft TCP -6112 UDP - 6112
StarCraft II TCP - 1119, 6113, 1120, 80, 3724 UDP - 1119, 6113, 1120, 80, 3724
Warcraft II Battle.net Edition TCP -6112-6119 UDP-6112-6119
Warcraft III TCP-6112 (по умолчанию) и 6113-6119 UDP-отсутствует
World of Warcraft уже писал
Call of Duty - Black Ops 4 TCP - 443, 3074 UDP - 443, 3074

Так что хватит говорить ерунду, что TCP в играх не используется... Используется, причем везде....

Добавлено (07 Ноября 2018, 00:00)
---------------------------------------------
Хочу заметить, что в некоторых играх они вообще от UDP отказались...

programMainДата: Вторник, 06 Ноября 2018, 22:17 | Сообщение # 3 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Цитата drcrack ()
причем здесь загрузка вообще? речь о задержке и лагах вызванных потерями
во всех современных сетевых играх используется udp (за исключением разве что пошаговых и браузерных), ты либо тролль, либо тебе стоит немного матчасть подучить.

Слушай, ты по-моему думаешь что много знаешь... Посмотрим на WOW и порты и протоколы по которому он общается и для чего:
TCP 1119 – Соединение с серверами battle.net и серверами World of Warcraft

TCP 3724 – Соединение серверами World of Warcraft, а также Blizzard Downloader

TCP 6881–6999 — Blizzard Downloader

UDP 3724 – голосовой чат игры World of Warcraft

TCP 1120 – Соединение с серверами battle.net и серверами World of Warcraft

И как мы видим, UDP только для голосовых чатов, даже качают через TCP файлы... Умник...
programMainДата: Вторник, 06 Ноября 2018, 21:37 | Сообщение # 4 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Так я и говорю, используйте udp для передачи данных (файлы, видео, аудио), для игр подойдет и tcp. У нормально написанной игры, на одного пользователя приходится мало трафика). И это аргумент. Давай проще так - ты сервер на UDP скинь, я замерию против своего TCP на работе нагружу их по несколько тысяч пользователей, будут просто передавать несколько строк друг другу, и посмотрим какая производительность будет и сравним так сказать... Кстати, ребят кому грамотная проверка на нагрузку нужна - обращайтесь. Загружу ваш сервак 10+к пользователями, отчеты заскриню))))

Добавлено (06 Ноября 2018, 21:44)
---------------------------------------------

Цитата Эргалон ()
programMain, Это так, образно говоря) Вообще хотел привести пример fps-а, просто что-то вархаммер вспомнил) Так или иначе, каждого юнита может нужно по механике двигать при помощи клавиатуры, а не тикать на карте мышкой, чтобы проложить путь) Тогда этот пример вполне себе имеет место.

В fps таже тема) замеряется начало движения - конец движения, рассчитывается сколько ты шел, начало движения мыши и конец. Считается все клиентом, а сервер только проверяет не соврал ли клиент и рассылает другим)))
programMainДата: Вторник, 06 Ноября 2018, 19:59 | Сообщение # 5 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Цитата Эргалон ()
Ну то есть upd хорошо используется там, где происходит непрерывная передача данных в активных действиях. Например если есть поле боя, на нем 1000 юнитов. Все перемещаются, всё норм.
На TCP это будет выглядеть так:
Пакеты не пришли, когда они приходят то юниты быстро перемещаются из одной точки в другую до последнего полученного положения.
На UPD:
Пакет не дошел. Юниты просто телепортируются к положению, полученным с последнего пакета.

Даже и не знаю, что выглядит привлекательнее))


кто двигает юниты по пакетам передачи? один пакет где начал движение, второй где закончил, на клиенте считаешь путь и двигаешь.... Так не? не канает? или вы на каждый пиксел пакеты передавать собираетесь? :D
programMainДата: Вторник, 06 Ноября 2018, 16:42 | Сообщение # 6 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Зачем? Все компании (включая игровых) имеют дата центры, 10 серверов поставил и распределил нагрузку. Все... 15000 бы набрать ;) . Наберешь столько - будут деньги с игры на второй сервер - еще на 15 тысяч))).
programMainДата: Вторник, 06 Ноября 2018, 16:02 | Сообщение # 7 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Господа, я писал на работе оператор фискальных данных, 500 транзакций в секунду. Асинхронный сервер TCP справился на ура.... Вы по-моему не совсем компетентны в данной теме... 15000 пользователей, канал гигабитный. Проблем с ним вообще нет. Хочешь сказать твоя игра сильней сеть нагрузит? Сомневаюсь.... Или вы начитались что UDP для игр а TCP в топку? Сейчас не то время, что бы как раньше выбивать миллисекунды для скорости работы программы...
programMainДата: Вторник, 06 Ноября 2018, 15:45 | Сообщение # 8 | Тема: c# Учимся писать асинхронный WebSocket Server))))
частый гость
Сейчас нет на сайте
Ну асинхронность нужна на c# у сервера, что бы эффективно обрабатывать несколько клиентов. Я пытался сюда выложить код, но так много почему то форум не принимает. В несколько сообщений тоже... А так, тут статья должна была быть)
programMainДата: Вторник, 06 Ноября 2018, 05:40 | Сообщение # 9 | Тема: c# Учимся писать асинхронный WebSocket Server))))
частый гость
Сейчас нет на сайте
Кто нибудь хоть раз писал асинхронный Web Socket Server?

Сообщение отредактировал programMain - Вторник, 06 Ноября 2018, 06:08
programMainДата: Вторник, 06 Ноября 2018, 03:02 | Сообщение # 10 | Тема: Насколько правелен такой подход к коду
частый гость
Сейчас нет на сайте
Цитата zhuravelsv ()
А как в микросервисной архитектуре да и вообще в почти любой другой передавать данные по сети? разработчики protobuf'a (из гугла, которые пишут свой механизм "быстрой и компактной" сериализации) удивились бы этому заявлению

Сериализация - хорошо. Но начинающий программист должен соблюдать несколько правил для нее:

1. Декорируйте атрибутом [Serializable] типы, реализующие интерфейс ISerializable;
2. Убедитесь, что все сериализуемые члены декорированы атрибутом [Serializable] и корректно сериализуются;
3. Реализуя интерфейс ISerializable, не забудьте реализовать конструктор сериализации (Ctor(SerializationInfo, StreamingContext));
4. В запечатанных типах установите модификатор доступа private для конструктора сериализации, в незапечатанных — protected;
5. В незапечатанных типах, реализующий интерфейс ISerializable, сделайте метод GetObjectData виртуальным;
6. Проверьте, что в методе GetObjectData сериализуются все необходимые члены, включая члены базового типа, если он есть.

Поэтому начинающим я советую просто взять MemoryStream и записать в определенном порядке все что ему нужно передать по сети, а с другой стороны в том же порядке прочитать. Все... На этом их гемор закончится. Я не говорю, что сериализация - это плохо. Просто эта морока для хотя бы мидлов уже...
programMainДата: Вторник, 06 Ноября 2018, 02:41 | Сообщение # 11 | Тема: Примеры кода С#
частый гость
Сейчас нет на сайте
Цитата zhuravelsv ()
Эта конструкция не эквивалентна конструкции using(....), так как юсинг для освобождения ресурсов вызывает Dispose(), и к тому же это просто бойлерплейт, и к тому же код с юсингом и так разворачивается в try-finally, так что это плохой совет

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

Да кстати, заглянул в MSDN они говорят, что у try-cath-finally есть даже преимущества небольшие:

"Это может быть личным стилем программирования или же осуществляться по одной из следующих причин:

1. Чтобы включить блок catch для обработки исключений, вызванных в блоке try. В противном случае исключения, вызываемые оператором using, а также создаваемые в блоке using, если блок try/catch отсутствует, не обрабатываются.

2. Чтобы создать экземпляр объекта, реализующего интерфейс IDisposable, область действия которого не является локальной для блока, в котором он объявлен."

ссылка: https://docs.microsoft.com/ru-ru/dotnet/standard/garbage-collection/using-objects


Сообщение отредактировал programMain - Вторник, 06 Ноября 2018, 02:47
programMainДата: Вторник, 06 Ноября 2018, 02:25 | Сообщение # 12 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Цитата Abel399 ()
Вообще, необходимо понимать, что нельзя на архитектуру приложения построенную поверх TCP накрутить UDP, обратное тоже верно. При проектировании нужно учитывать особенности протокола. Можно провести аналогию с СУБД и ACID, где требуется атомарность, устойчивость, изоляция и согласованность -> получаем консистентность передаваемых данных даже с UDP. Другой момент, что на это может не хватить квалификации, но это уже тема отдельной дискуссии.

Зачем строить свой протокол над UDP, что бы добиться работы схожей с TCP? Если ты и делаешь свой протокол, который решает проблему упорядоченной доставки данных и защиты их - то поверь, люди которые сделали протокол TCP - сделали это лучше. Я не говорю не использовать UDP - я говорю использовать его правильно и по назначению. А UDP использовали в играх в конце 1990 - начале 2000-х, когда скорость инета была мала, тогда и можно было бы почувствовать разницу в скорости. Сейчас - не почувствуешь...
programMainДата: Вторник, 06 Ноября 2018, 02:20 | Сообщение # 13 | Тема: Написание движка на C#.
частый гость
Сейчас нет на сайте
Цитата FlyOfFly ()
Почему это? Чисто в теории, ты можешь игроку дать возможность запилить новую игру на основе твоей игры и позволить редактировать вообще всё, что мог и ты при написание игры. Моддинг это не часть движка, а часть игры. А вообще, как написали выше: пилишь игры и практикуешься, читая при этом книги полезные, рано или поздно научишься делать движки

Я и написал, что игра от движка ничем не отличается. Так что пусть пишет игры, делает заготовки, которые применит в других проектах - так и глядишь двиг соберет. Не надо останавливаться на двиге, а то так до игры не дойдешь некогда.
programMainДата: Суббота, 27 Октября 2018, 02:38 | Сообщение # 14 | Тема: Подскажите раздел на форуме
частый гость
Сейчас нет на сайте
Цитата TLT ()
Тогда в разделе по этому ЯП.

Либо разделить проект от уроков в 2 темы в разных разделах...

Спасибо).
programMainДата: Пятница, 26 Октября 2018, 23:31 | Сообщение # 15 | Тема: Подскажите раздел на форуме
частый гость
Сейчас нет на сайте
Я хочу сделать некий дневник программиста. Что бы наглядно уроки выпускать по программированию. Поэтому скетчи и все остальное сразу не могу предоставить.
programMainДата: Пятница, 26 Октября 2018, 23:23 | Сообщение # 16 | Тема: Написание движка на C#.
частый гость
Сейчас нет на сайте
Цитата zhuravelsv ()
ну как минимум игра под винду не сможет сама себя собрать под макос. Не сможет игроку позволить полностью редактировать "себя". странный вопрос, почти всем

В функцию двига не входит сборка. Это функция среды разработки, а так, посмотри на WOW например - он создан модульным подходом и каждый подгружаемый модуль компилится на лету по ту систему в которой ты играешь. Так что не убедил. Игроку редактировать себя? А при чем тут игрок? Я могу сделать админку к игре, где админы будут карты ваять как в варике и настраивать все. Так в чем отличие то дорогой друг?
programMainДата: Пятница, 26 Октября 2018, 15:36 | Сообщение # 17 | Тема: Хранение классов на сервере C#
частый гость
Сейчас нет на сайте
Так, а хранение классов на сервере тут причем?

Добавлено (26 Октября 2018, 23:25)
---------------------------------------------
Ты хочешь состояние передавать классов от клиента серверу?

programMainДата: Пятница, 26 Октября 2018, 15:33 | Сообщение # 18 | Тема: Сетевая библиотека вместе!
частый гость
Сейчас нет на сайте
Цитата

что TCP > UDP

Нет, наоборот. Просто если бы ты хоть раз сниффер открывал бы, или делал бы нагрузочный тест на сервера, тогда бы ты понял в чем проблема.
programMainДата: Пятница, 26 Октября 2018, 15:29 | Сообщение # 19 | Тема: Написание движка на C#.
частый гость
Сейчас нет на сайте
Какие могут быть цели? Написать игру. Чем игра отличается от движка можно узнать? Правильно, ничем... Это просто люди абстрактно разделили эти два представления. А в итоге оба продукта содержат одинаковый код при релизе.
programMainДата: Пятница, 26 Октября 2018, 05:20 | Сообщение # 20 | Тема: Дайте Совет
частый гость
Сейчас нет на сайте
Стринг билдер будет невыгодней в противовес до 10 строк. Разницу понимаете между ними? Вот когда будете свыше хотя бы 5 раз строку изменять или там делать операции какие либо с ней, тогда и используйте этот class.

Сообщение отредактировал programMain - Пятница, 26 Октября 2018, 05:20
Форум игроделов » Записи участника » programMain [30]
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2022 Рейтинг