Jump to content

NoWinFate

Advanced members
  • Content Count

    13
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by NoWinFate

  1. Понятно, судя по всему легаси для проекта, для шифрования там 3DES и ещё какой-то самопальный xor на максималках. Можно смело выкидывать, тем более реализаций вышеописанных функций - нет.
  2. What is the function of these files? Why are they needed?
  3. Есть изменения, переписан сетевой двиган на IOCP, обновлены плюсы до версии С++23, добавлен последний LUA JIT. Будет релиз в следующем месяце.
  4. Ну такой себе аргумент. С++ разраб разберется с С# за 1-2 дня, а вот наоборот - это может быть проблема. У каждого свое видение на то, как оно должно быть Можно подставить любой язык - Java, Scala, Kotlin, golang и т.д. Вы с другими системами работали? Проблемы которые они успешно решаются в С++, в других системах просто не существуют. Хм.. доверяете ли вы платформе enterprise уровня на которой работают миллионы критичных сервисов? Ну да, доверяю. Доверяю JVM, доверяю golang, дотнету тоже доверяю. Почему нет то?) Ну молодцы. С сообществом, полагаю не поделились?) Мне он ничего не даст, возможно кому-то из разработчиков что-то подскажет. Обычная схема скейлинга, с микросервисами и т.д. Сам могу про такое долго рассказывать. WorldOfTank отлично скейлится, потому что там игровой процесс ограничен картами, которые существуют, пока идет игра. А вот когда мир непрерывный это совершенно иная задача. В рабочее время я занимаюсь системой подобной этой Вот тут почитать можно https://networking.docs.improbable.io/welcome/spatialos-concepts/offloaded-and-zoned-servers/ А в свободное решил заняться корсарами. В них есть что-то ламповое) Даже не знаю, как этот вывод получился. Выдержать DDOS = отразить DDOS. Это не ко мне, это к Вам.
  5. С одной стороны компиляторы для C++ дают высоко оптимизированный код и вроде как плюсы должны быть быстрее. Но, в реальности все гораздо сильнее зависит от того, как, где, когда и на чем будет работать код. Начнем с типа задач - есть IO (Input\Output) задачи и есть CPU задачи. В IO задачах почти не важно, насколько быстрый код - все зависит от задержек ввода\вывода при обращениях к БД, сети, файлам. Выигрыш, который дает оптимизированный компилятор тут будет вообще не будет на уровне погрешности из-за ожидания операций ввода\вывода. Применяя С++, Delphi, Go, Ocaml, .NET, Java, Rust мы получим одинаковое время работы. Если берем CPU задачу, то здесь выполнение зависит от применяемых алгоритмов, архитектуры и т.д. Ок, при прочих равных С++ в числодробилках будет быстрым. Насколько быстрым? - Неизвестно. Нужно поводить замеры, по крайней мере при работе с векторами, матрицами С++ будет очень быстрым, позволяет отлично векторизовать эти операции и тут с ним сложно сравниться. Поэтому 3D игрушки\драйвера\библиотеки для работы с графикой\алгоритмы CV(computer vision ) и пишут на плюсах - огромное кол-во матриц, векторов, и прочего требуется перемножать друг с другом. Гейт - это типичное IO приложение и его основная задача перекладывать из одного сокета байты в другой, делая небольшие операции над ними. Основная операция, которая тут будет - это копирование байтов из одного источника в другой - эти операции одинаково быстро выполняются в любом языке. Казалось бы - почему его на плюсах не написать? Вот тут и начинаются сложности с С++ - когда начинаем писать реальное приложение. Оказывается, что в С++ нет системы пакетов (которые почти в любом языке есть в XXI веке), поэтому нужно тащить кучу исходников в свой код что добавляет проблем при компиляции, когда у одного заводится, у другого - нет. Например нормальный логгер. Когда доходим до сетевой части - все ещё интереснее. В C++ нет дефолтной либы boost не предлагать для работы с сетью, есть только стандартный API сокетов, который работает так себе. 3к сокетов это предел для текущего гейта(теоретический предел 5к). Чтобы была возможность держать больше сокетов, чтобы операции выполнялись быстрее (вот то самое, что обеспечит ускорение для работы гейта) нужно прикручивать IOCP в windows, в linux - epoll тащить. Ну или прикручивать libuv. Затем, хорошо бы прикрутить метрики которые бы показывали текущую ситуацию на гейте, например на основе прометея. Когда все эти кусочки собираем в гейте, то получаем кучу кода, написанную в разных стилях, по разному инициализирующуюся, и как следствие - трудно поддерживаемую и понимаемую. Чтобы это все перенести на linux, нужно ещё кучу времени потратить на компиляторы gcc & clang и обмазаться @ifdef в куче мест. Если берем дотнет (C#), то у нас куча вещей идет из коробки - автоматическая поддержка windows\linux\macos для которой и напрягаться не нужно. Быстрые сокеты, которые смогут и DDOS атаку выдержать и кучу клиентов, асинхронный ввод\вывод. Пакеты, которые ставятся из хранилища пакетов и в них уже есть почти вся необходимая функциональность и гораздо меньшее количество кода, который реализует ту же логику на плюсах (да и писать на C# гораздо быстрее чем на С++). Отсутствие всяких проблем с переполнениями буферов, порчей памяти, с неинициализированными значениями и т.д.. На порядки лучшая диагностическая информация. Я не говорю о медленных строках в С++ и медленном аллокаторе памяти из коробки. И еще один важный момент - код очень похож на С++ который в сообществе знают. Ну я не говорю уже о том, что многие вещи гораздо быстрее\лучше и безопаснее на C# реализовываются при высокой скорости работы.
  6. Привет. Тут ответ на целую статью тянет) Вечером доберусь до компа и напишу про плюсы и минусы решений на разных языках.
  7. Разве то что я сказал касается геймплея? Геймплей мне как раз очень нравится, замечательная игрушка, с интересной прокачкой. Именно благодаря этому я и решил привести сервер в нормальное состояние. Эта игрушка с душой. С клоуном может и перегнул. Но. Желание это все отрефакторить никак не связано с тем, что испытываешь, когда это все рефакторишь. Совершенно не связанные друг с другом вещи. Комментарии про горящую жопу еще будут - она у всех горит, когда видишь определенные места. Это только начало - приведение проекта в стадию, когда он может хотя бы по человечески запускаться, билдится и стартовать. Я собираюсь по всем сомнительным моментам отдельно пройтись подробными комментариями почему так не надо и как надо. Есть несколько тем: Сетевая часть Внутренняя логика парсинга пакетов, сетевых вызовов и т.д. Протокол Передача параметров, контроль границ, вывод содержимого, формат Пул команд, буферов, подсчет ссылок, reader's & writer's Поддержка нескольких протоколов, легаси и т.д. Шифрование Защита от повторной пересылки пакетов Защита от просмотра пакетов Защита от DDOS Сетевое общение серверов Варианты топологии Варианты технологий обмена Логирование Текстовые логи Игровые события База данных Оптимизация ORМ для работы Хранение ресурсов, шмоток, индексы, статистика, ключи и т.д. Работа со шмотками (транзакционность, как избавиться от дюпа) Работа с гильдиями и группами Чат Локализация в игре Магия Карты, перемещение Работа с Lua С какой начать? P.S. Нужно чтобы кто-нибудь посмотрел клиент и добавил необходимые ресурсы, да и вообще запустил и посмотрел, насколько он хорошо работает. Потому что он глючит периодически (возможно в процессе рефакторинга могло что-то перестать инициализироваться, так как оно по ошибке инициализировалось)
  8. Просто девиз клиента xDDDD https://gitlab.com/alexxst.st/corsairs-online-public Чтобы проверить клиент, отключайте WPE, которую делал какой-то анальный клоун (я могу лучше, да). Версия Release пока не исправлялась (только Debug) сервера и клиент https://disk.yandex.ru/d/z0TtNWp3w-IRBw
  9. У меня вообще 18+ опыта, из них лет 6 кроссплатформы, но не на С++, а на дотнете. Сервер под линукс гарантировано не соберется, там к винде приколочено гвоздями все намертво. Если все вот это выдирать - достаточно трудно, долго и больно. Я думаю, что под gcc & mingw & clang это добро не соберется гарантировано, а ошибок будет больше 10к+. Мне хватило ошибок обычного компилятора от MS, который достаточно хорошо стандарты плюсов держит. Да, без resharper тут никуда, это вообще по умолчанию должно стоять. Раньше Visual Assist использовал, но решарпер больше понравился. Ну меня тоже не удивляет этот китайский код, я даже могу примерно назвать сколько человек его писало, потому что код судя по всему, ревью не проходил в той команде - работает и ладно. Просто жопа горит с многих моментов. using namespace std - это я выпили намертво, как и мого других опасных конструкций, в том числе и с итераторами. А, впилил нормальную строку соединения dsn в конфигах, а порнографию с шифрованием пароля выкинул. Сервера, как ни странно, завелись и начали работать. С клиентом еще борюсь) CLion не хочу использовать, потому что планирую частично сервер на дотнет перевести, а CLion такие солюшены не поддерживает. Только студия и райдер. Да и тулы для разработки какие-нибудь надо добавить, например по управлению модами, по редактированию итемов, правке ДБ, какая-нить панель для отслеживания серверов. Не на С++ же их писать - это долго и больно (про QT я знаю, но связываться с ним не хочу). Для этого отлично новый MAUI подойдет под Blazor накидать можно что-нибудь, чтобы кроссплатформено работало. P.S. Сегодня клиент выложу, как добью
  10. Кому-то разрабатывать на 9-ти летней студии, когда есть более лучшие инструменты - норма. Инструменты должны быть современными. Мне нужны лямбды, auto, стандартизированная либа для 20х, а не кастрированное вот это все что там есть. Часть кода на дотнет хочу попробовать перенести(у него больше возможностей и проще разработка), поэтому cmake не в тему. В студии (Rider'е) разработку таких проектов вести гораздо проще. С луа в проекте беда... думаю вот это затащить https://github.com/kunitoki/LuaBridge3 - стильно, модно, современно, со всякими рантаймчеками и кастами. А главное, с приведением типов можно не париться на шаблонах сделано. Сервер перевел на VS2022, C++20 (выкинул BTI по пути, сорян, если кому-то было нужно) Клиент перевел на VS2022, C++20 (добавил заголовочные файлы DirectX 8.1 в исходники + либы, теперь клиент компилируется из коробки, без танцев) После тестирования планирую залить все одним комитом. В клиенте осталось только импорт либ при сборке пофиксить... P.S. Пользуясь случаем, передаю привет человеку, который код клиента засрал goto'шками, причем таким образом, что кроме древнего компилятора этот код ничто не скомпилит. Парень, юзай return. Он работает! Верняк говорю! Пасиб!
  11. Я около 4х часов просмотрел код сервера и впечатление так себе... Скажу честно, за такой код на С++, как в пиратии, обычно пристреливают на месте. По крайней мере - Я. Попробую отрефакторить этот сервер чисто по фану, ну и частично его перенести на более удобную платформу для разработки - dotnet. Клиент рефакторить не буду (только минимум) План таков Сначала все это переведем на VS2022, C++ 20, чтобы была возможность комфортной работы. Оптимизируем солюшен (может на х64 портировать?) Затем исправляем сетевую часть для того, чтобы можно было хоть в каком-то виде смотреть что за пакеты приходят на сервер. Тот бинарный протокол который сейчас есть хорош, но несет в себе проблемы с границами и размером параметров (это только на первый взгляд). А, я еще магическое число 0.618 нашел в сетевом коде... Это просто абзац. Третьим этапом перепиливаем гейт на dotnet (C#). Наверняка текущий больше 2-3к коннектов не тянет в принципе. Потом поиграемся с хранением итемов (если честно хранение ресурсов в сериализованный строке, дикая дичь какая-то, и наверняка с дюпами постоянная головная боль) Ну и шестой - с геймсервера по кускам попробуем перенести функционал (надеюсь, за полгода управлюсь) P.S. Асинхронщина, многопоточность, архитектура, вот это все.. не переключайтесь. Может даже будут стримы... . P.P.S. Разработка открытая, репозиторий тут https://gitlab.com/nowinfate/corsairs-online-public
  12. В новости указан только сайт гитхаба, без ссылки на репозиторий. Где можно взять исходники (сервер+клиент) версии 1.38(или 1.39) чтобы над ними можно было поработать?
×
×
  • Create New...