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