Задать вопрос
  • Разработка онлайн игры?

    Lite_stream
    @Lite_stream Автор вопроса
    Сетевая часть - пожалуй, самая сложная часть в геймдеве (если это не браузерка, конечно).

    А какая разница, приложение работает внутри браузера или является целевым десктопным ? Ведь браузер не решает никаких проблем, связанных, например, с потерей пакетов или предсказаниях об игровом мире

    Что касается сетевой части, вам придется принимать мучительные решения, как это реализовать наилучшим образом, чтобы игроки были довольны геймплеем в условиях ненулевого лага.

    Ну для этого и реализован лист снапшотов состояний и бинарный протокол :)

    Просто мне кажется, что легче сделать свою простую ( в плане ассортимента функционала, а не простоте алгоритмов ) физику с некоторой кастомизацией для клиент-серверной архитектуры, чем попытаться навесить её на какой-то готовый на физ. движок

    Ну а движки с удобными редакторами вроде Unity использовать только для создания игровых локаций, создавать ( по локации созданной в Unity мир ) xml / json файл и потом скармливать его серверу при старте для инициализации мира
  • Почему параллельный Promise.all() на порядок медленнее, чем последовательные await'ы?

    Lite_stream
    @Lite_stream Автор вопроса
    Eugen, я же объяснил всё в самом вопросе: с последовательными await'ами поскольку мы на каждой итерации ждём завершения предыдущего запроса, то работать будет лишь 1 воркер ( если, конечно, у них не будет каких-то других эвентов ), а во 2-м варинте мы не дожидаемся завершения каждого эвента, мы их только отправляем на 'обработку', соответственно воркеры ( уже не 1, а несколько ) должны расхватать эти эвенты и начать выполнять.
    А если использовать in, то смысл теста теряется, так как, используя такой оператор мы просто будем делать лишь 1-но обращение к БД и оценить разницу между множественными последовательными await'ами и Promise.all не получится
  • Почему параллельный Promise.all() на порядок медленнее, чем последовательные await'ы?

    Lite_stream
    @Lite_stream Автор вопроса
    Eugen, так специально же сделано несколько запросов, вместо одного
  • Почему параллельный Promise.all() на порядок медленнее, чем последовательные await'ы?

    Lite_stream
    @Lite_stream Автор вопроса
    Robur, спасибо за информацию :)
    Пробовал и по отдельности запускать await / all - один и тот же результат
    Сейчас попытаюсь разобраться в драйвере, потому что, как Вы и сказали, скорее всего дело в нём
    Исправил заголовок вопроса )
  • NodeJs( V8 ) или C / C++ для тяжёлых CPU операций ( > 100 Mlsec )?

    Lite_stream
    @Lite_stream Автор вопроса
    VladimirMirand, а так, уже спасибо за ответ :)
  • NodeJs( V8 ) или C / C++ для тяжёлых CPU операций ( > 100 Mlsec )?

    Lite_stream
    @Lite_stream Автор вопроса
    Хорошо, насчёт ассемблера учту

    перетянуть эту часть на C++ и уже строить отдельный мост для интеграции двух приложений между собой (нода + часть на C++)

    Кстати, насчёт этого тоже есть некоторые неясности, например, после какого объёма приложение лучше делать не как аддон для ноды, а как полностью автономную программу с протоколом для общения с ней
  • NodeJs( V8 ) или C / C++ для тяжёлых CPU операций ( > 100 Mlsec )?

    Lite_stream
    @Lite_stream Автор вопроса
    VladimirMirand, ну я в вопросе упомянул примерный уровень абстракции алгоритмов, понятно же что алгоритмы для графов != арифметика. А услышать хотел не про ассемблер, а про то, как часто люди используют интеграцию с / с++ в ноду и является ли это оптимальным подходом
  • NodeJs( V8 ) или C / C++ для тяжёлых CPU операций ( > 100 Mlsec )?

    Lite_stream
    @Lite_stream Автор вопроса
    VladimirMirand, очевидно, что имелось в виду hard, а не hardware
  • Many-to-many как избежать Race conditions?

    Lite_stream
    @Lite_stream Автор вопроса
    Вы имеете в виду критическую секцию для этого участка кода ?
  • Array of embedded documents vs Foreign key?

    Lite_stream
    @Lite_stream Автор вопроса
    Чтобы не делать N итераций используют индекс, чтобы получить нужные документы без переборов (а переборы задействуют "диск").

    Ну так, если в коллекции Users массив коллекций Comments, всё равно равно придётся для каждого док-та Users, а это N, искать в кол-во просмотров, а это M для каждого док-та Users, которое в Comments индексировано и займёт не M, а LogM. Не совсем понимаю при чём здесь индекс у Users, там же своё дерево(по ObjectID или любому другому полю) у Comments для каждого документа пользователя или нет ?

    Откуда у вас тут Log? Чтобы получить "все комментарии имеющие 200 просмотров.", коллекцию пользователей трогать вообще не обязательно.

    Users и не трогается :). N * M потому что комментарии не по массивам в Users распределены, а в одном месте, в Comments. То есть было N док-ов в Users и в каждом по M комментариев, а теперь всё в одном месте.
  • Как реализовать Double Submit Cookie?

    Lite_stream
    @Lite_stream Автор вопроса
    Я понимаю, что Double Submit Cookie - защита от CSRF. У меня-то вопрос просто в реализации DSC, ну а какие вопросы я описал выше :)
  • Как реализовать Double Submit Cookie?

    Lite_stream
    @Lite_stream Автор вопроса
    Если токен генерировать для каждой формы, то и куки следует сохранять для каждой формы, иначе, что сравнивать на сервере. Я не до конца понимаю почему его многие советуют вставлять в каждую форму, если можно сделать один и обновлять при каждом запросе в теге meta(может возникнуть проблема с multi-tab, как описано выше) или в localStorage