.NET Developer
  • Почему я выбрал серверную разработку в геймдеве

    Хороший вопрос!)

    Давайте пройдемся по основным пунктам, которые применимы к нашему проекту.

  • Injection — Все верно, ORM мы не используем. Вместо запросов, которые построены формированием строк, используем параметризированные запросы. Кроме того, все данные игрока хранятся в сжатом и зашифрованном виде. Поэтому риск SQL-инъекций и несанкционированного чтения этих данных сводится к минимуму.
  • Broken Authentication — Мы регулярно проводим аудиты наших модулей аутентификации. По результатам — не было найдено критических уязвимостей.
  • Sensitive Data Exposure — Вся работа с данными игрока производится в рамках GDPR.
  • Broken Access Control — Ролей у нас в игре всего 2: обычные игроки и админы. Функционал определения админа определяется конфигом, который извне никак не поменять.
  • Security Misconfiguration — Мы используем разные конфигурации для разных серверов (Test, Production). Следим за тем, чтобы конфиденциальные данные не были отображены в ошибках и различных сообщениях на клиенте.
  • Insecure Deserialization — Мы не принимаем сериализованные объекты из ненадежных источников. Используем их только для обмена данными между внутренними сегментами и сервисами.
  • Почему я выбрал серверную разработку в геймдеве

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

    Вариант со значком статуса, кстати, прикольный:)

    Поддержал: Natalia Riabokon
  • Почему я выбрал серверную разработку в геймдеве

    В Go така штука вирішується через кодогенерацію, а у вас як?
    Замість JSON-у могли вибрати оптимальнішу сералізацію Protobuf чи FlatBuffers

    FlatBuffers и ProtoBuf ещё не было, когда начиналась разработка сервера социальных проектов, а многое из них сейчас используется на Рейде.

    Потом рассматривали Protobuf, но не стали переходить из-за недостатка клиентских библиотек. Также мигрировать всех пользователей на этот формат на живых проектах очень рискованно. Ну и плюс можно сказать, что у JSON в целом преимущество в читаемости, плюс наша библиотека работает быстрее Jil, .NET Core сериализации, и даже быстрее, например, чем MessagePack.
    Надо учитывать, что с нашими нагрузками важен не только размер данных, а и эффективность самой библиотеки, чтобы при большом кол-ве вызовов и потоков не возникло проблем с производительностью.

    А об’єднати монети?

    Точной причины я уже не помню, но монеты мы решили не суммировать.

    Поддержал: Peter Statsenko