• Почему пишет ошибку Error: Module did not self-register при работе с worker threads (canvas)?

    @lostero
    Единственное решение - форкать и править под многопоточность биндинг.
    Разработчики более 3 лет подобные issue закрывают, как невозможные.

    Это косяк разработчиков нативного модуля.
    Данные модуля должны быть привязаны к контексту, в котором они создаются (NodeJS Context-aware addon)
    И должны очищаться, когда контекст уничтожается, через спец. хук ноды

    Разработчики сего аддона либо не знают этого, либо забивают в пользу поддержки старых версий ноды.

    worker_thread, child_process используют собственные экземпляры Ноды для каждого потока.
    Если нативный модуль не может это использовать, то это проблема разработчика нативного модуля.
    Я вот ни в зуб ногой в синтаксисе C/C++, но смог нативную либу для кодирования изображений в h264 заставить работать как надо и в нодовских потоках (8-50 микросекунд на один 1080p фрейм).

    Моего терпения переписывать за другими биндинг ещё и для этого модуля не хватит, склонирую модуль или буду кидаться данными из отдельного процесса (если совсем убого по роизводительности придётся лезть в C/C++ и кривыми руками говнокодить модуль, чтобы был производительнее, т.к. гуру C/C++ в опенсорс редко лезут без спонсоров).
    Ответ написан
    Комментировать
  • Какую технологию лучше выбрать для создания карты браузерной игры?

    @lostero
    По поводу konvajs не скажу. Через webgl можно получить больше производительности, чем из 2D контекста, но связано с доп. танцами, если пропускали лекции по комп. графике.
    Хотя, если забыть в некоторых местах про читаемость кода, то можно и из 2D контекста выкрутить хорошую производительность.

    Для частой синхронизации данных лучше использовать вебсокеты - избавят от пересылки лишних данных с каждым запросом. Советую взглянуть на https://github.com/uNetworking/uWebSockets. Написано на C/С++, есть версия под NodeJS. Если ни одна из версий не подходит под ваш набор технологий, поищите аналоги.

    P.S. Сам сокеты из этой либы не использовал, только http сервер. Он показывает себя незначительно лучше nginx при отдаче кэшированной в RAM статики в виртуалке Centos 7, 1 cpu 2.6Ghz, 1Gb RAM (вполне возможно, что я не настроил правильно nginx), 5.7-6к rps против 5.4-5.6к rps. На двух ядрах http сервер из uWebSockets для NodeJS выжимал 14-15к rps, но тут периодически забивался 100мбит канал, а nginx я не тестировал т.к. решил, что rps сравнимый с nginx для ноды уже хорошо.
    Ответ написан
    Комментировать