Ответы пользователя по тегу Node.js
  • В каком случаи использовать --save и --save-dev в NPM?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Если Вы хотите, чтобы npm модифицировал зависимости в package.json, а зависимости, как известно, делятся на основные (dependencies) и для разработки (devDependencies). Зависимости для разработки ставятся через npm install packageName --dev, и это используется для автоматизированного тестирования, сборок и т.д.
    Ответ написан
    1 комментарий
  • Что учить: сразу NodeJS на Azure или NodeJS отдельно?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Развертывание - дело десятое, осваивайте JavaScript, если с этим все в порядке, то посмотрите видеоуроки и беритесь за Node.js API, а потом пройдите лабораторки на nodeschool. Параллельно нужно собрать все свои знания в стек технологий, на одной ноде Вы напишете только сервер, а на клиенте что? Нынче времена такие, что одного jQuery уже не хватит, посмотрите React, вот тут серия статей: habrahabr.ru/post/229655 и подберите СУБД для своих нужд, например, рекомендую MongoDB, если у Вас данные аморфные, сложной или часто изменяющейся структуры. Рекомендую PostgreSQL, если данные имеют четкую, редко меняющуюся структуру и хорошо ложатся в таблицы. Все это прекрасно ставится на локальной машине, но если у Вас виндовс, то рекомендую завести виртуалку с CentOS или другим линуксом.
    Ответ написан
    Комментировать
  • Как организовать соединение множество игр с их БД?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Когда Вы делаете MongoClient.connect с использованием драйвера mongodb то создается пул соединенний с базой, они открываются и закрываются по мере необходимости, так что, не волнуйтесь и используйте одно соединение с БД для всех запросов к БД. И если у Вас платформа для игр, то храните все в одной БД, потом будет проще бекапить и восстанавливать, а если хорошо подумать, то и какая-то обобщенная структура со временем наметится.
    Ответ написан
    Комментировать
  • Какой алгоритм работы модуля по логированию изменений файла?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    А стрим тут и не нужен, делайте fs.readFile, потом ставьте fs.watch и при изменении fs.readFile в другую переменную и сравнивайте, только нужно создать еще очередь сравниваний, потому, что файл может меняться чаще, чем закончится предыдущее сравнивание (но это чисто теоретически, если по специфике задачи известно, что он меняется с малой периодичностью, то это можно и опустить). Результат fs.readFile это объект Buffer, для сравнения двух буферов, скорее всего, если они содержат текст их можно перегнать в строки .toString() и парсить. А вот понять, идентичны ли буферы, можно при помощи Buffer.compare(buf1, buf2).
    Ответ написан
    3 комментария
  • Как добавить в корзину интернет - магазина разные сущности?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Тут три варианта, или делайте subtype discriminator или документные (бессхемные) БД (например MongoDB), или во многих реляционных СУБД (например, PostgreSQL) уже доделали колонки типа JSON (куда можно писать все поля, которые отличаются у разных типов Item-ов, писать туда сериализованный объект, по сути).
    Ответ написан
  • Node js вызов асинхронной функции в цикле. Как дождаться данных?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Или добавляете счетчик и в каждом колбеке (в который приходят данные) его добавляете и проверяете, не последний ли это фрагмент данных. Или используете библиотеку async: https://github.com/caolan/async а именно async.each или async.parallel.
    Ответ написан
    Комментировать
  • Где разместить nodejs сервер?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я отдаю предпочтение физическим серверам, это неизмеримо удобнее, чем неуправляемые хостинги типа хероку и нодеджицу, и значительно лучше, чем виртуалки, которые теряют производительность и лейтенси на слое виртуализации. Если нужно добиться действительно хорошего latency (отклик или отзывчивость) то другого решения нет, но прошу не путать это с производительностью т.е. rps (request per second) на виртуалках можно даже дешевле поднять, а вот отзывчивость системы на железе выше. Но это не всегда так критично. Кроме того, советую сделать таблицу и рассчитать стоимость одного ядра или даже 1Ghz для всех вариантов. Из-за ограничений ноды в памяти одного процесса, имеет смысл делать расчеты исходя из пропорции 2гб на 1cpu.
    Я использую вот что:
    1. Для маленьких проектов ($5 в месяц это очень хорошо) https://www.digitalocean.com/
    2. Для проектов среднего уровня (кое-кто на них ругается, но у меня лично никогда проблем не было с ними) https://www.hetzner.de/
    3. Для крупных проектов (есть замечательные 40-ядерные сервера MG-256) www.ovh.ie
    Ответ написан
    Комментировать
  • Что можно написать на Node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js

    Часто применяется для:

    1. Локальные приложения и утилиты командной строки
    • Сборщики и трансляторы
    • Пакетная обработка и сценарии отложенной обработки
    • Скрипты, CLI (интерфейсы командной строки)
    • Генерация документации, отложенное формирование отчетов
    • Сценарии тестирования для других систем

    2. Серверы
    • Серверы веб-приложений и SPA
    • Серверы и API для мобильных приложений
    • Любые другие веб-API (RPC, JSON, REST)
    • Серверы сообщений и трансляция событий (чаты, игры, интерактив)
    • Заплаты на уже готовые системы, написанные на других языках, для реализации вебсокетов, SSE, лонг-пулинга и т.д., т.е. для затыкания дыр, для решения проблем в узких местах уже работающих систем.

    3. Клиенты
    • Оконные приложения (nw.js, node-webkit)
    • Кравлеры, парсеры и сбор данных

    4. Железо
    • Программирование микроконтроллеров (arduino, espruino, tessel)
    • Промышленная автоматизация

    Редко применяется (но подходит) для:
    • CMS, публикация контента (просто ниша уже занята и в этой задаче нода не дает чего-то принципиально нового или сверх соблазнительного).
    • Массовая электронная коммерция и торговля (не применяется для массовых движков магазинов, но используется отдельными крупными компаниями для торговых и платежных задач в качестве дополнительного средства к уже имеющемуся ПО, по сути закрывает узкие места).

    И плохо подходит:
    • Вычисления и моделирование, со скоростью математических операций нода и JS, как не типизированный язык, не дают хороших показателей
    • Научные приложения (по тем же причинам)
    Ответ написан
    10 комментариев
  • Как развернуться на Azure на нескольких виртуальных машинах с общим файлов хранилищем?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Азур - это право очень странный выбор для ноды, почему бы не Digital Ocean, OVH или Hetzner? Берегитесь майкрософта, сначала Вы подсядите на один их сервис для хранения файлов, потом на смежный, потом еще один и так постепенно приложение растворится в азуре и перенос еще куда-то будет не возможен. Я не рекомендую использовать их как хостинг, а если это уже решено, то хранение файлов оставьте как оно и было сделано, просто в файловой системе, так можно будет потом проще передвинуться куда захотите, между компами настройте NFS.
    Ответ написан
    1 комментарий
  • Socket.io: Как сделать чтобы происходило выполнение события на всех подключенных компьютерах кроме моего?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я не использую socket.io, но если уж пригласили отвечать, то попробуйте socket.broadcast.emit('eventName', data);
    Ответ написан
    1 комментарий
  • Как получить данные из dll на линуксе?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Можно парсить двоичный формат PE (Portable Executable) он хорошо специфицирован и все DLL в этом формате. Для этого будут полезен класс Buffer https://nodejs.org/api/buffer.html и тут есть статья blog.paracode.com/2013/04/24/parsing-binary-data-w... и еще библиотека https://www.npmjs.com/package/binary-parser для упрощения жизни. Еще есть вариант искать парсер PE для линукса и запускать его из ноды через командную строку и потом парсить его вывод в консоль, это может быть проще, но добавляет зависимости. Я бы парсил сам.
    Ответ написан
  • Микросервисная архитектура в nodejs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я бы не противопоставлял монолитные приложения и микросервисы. На самом деле чем лучше приложение разделено на части, тем лучше оно централизовано. Приведу сначала пример житейский, если каждый сотрудник автономно выполняет порученную ему работу хорошо и качественно, то сокращается взаимодействие между сотрудниками, уменьшаются расходы времени на контроль и переделывание работы, при этом монолитность иерархических структур упрочняется чем более автономен каждый сотрудник в организации. Что же противопоставить, что же плохо? Плохо - смешивать уровни абстракции, в ноде распространено смешивать все в кучу, я приводил пример тут: habrahabr.ru/post/247543 цитирую:
    Прикладной код часто смешан с системным. Дело в том, что нода, и большинство производных фреймворков, слишком низкоуровневые и каждое приложение обязательно содержит часть системного кода, не относящегося к задачам предметной области. Вот и случается, например, что добавление HTTP заголовка становится методом класса Patient и находится в одном файле с заданием роутинга URLов к сему пациенту и с отправкой событий через веб-сокеты. Это чудовищно.

    Монолит - это не плохо. Плохо, когда смешаны слои абстракции, если это не понимать, то микросервисы ничего не дадут. Это приводит к высокой связанности кода, когда каждый фрагмент зависит от множества других. Внутри каждого микросервиса можно сделать полное месиво абстракций. Лучше планировать архитектуру слоями, ниже - слои системные, выше - прикладные. Иногда их нужно 2, иногда 3, иногда больше. В каждом модуле, конечно у вас будут как минимум: внешний интерфейс (содержащий внешние вызовы и спецификации форматов данных для обмена), внутренняя логика и внутренние структуры данных. Задача архитектора сделать так, чтобы интерфейс модуля экранировал внутренние структуры данных и внутреннюю логику от зависимостей. При этом, делить приложение на сотни процессов не обязательно, даже внутри одного процесса вы можете связать компоненты по принципу микросервисов, посадив их на шину событий, это будет называться модель акторов.
    Ответ написан
    2 комментария
  • Почему не загружается стороннее видео в node-webkit?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я с таким не встречался, но попробуйте включить плагины https://github.com/nwjs/nw.js/wiki/Third-party-bro...
    Ответ написан
  • Возможно ли установить набор модулей для NODE.JS на компьютере без выхода в инет?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    В вашем случае проще установить на подключенной машине и потом просто папку перенести целиком, вместе с node_modules.
    Ответ написан
    1 комментарий
  • Есть какие-нибудь ресурсы по построению правильной серверной архитектуры на node.js/io.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Архитектурные принципы не очень связаны именно с нодой, они будут примерно одинаковыми, на каком бы языке вы не писали. Первое, что я могу посоветовать, когда Вы переходите от технологий программирования к архитектуре систем, это как переход от кладки кирпича к архитектуре зданий - нужно отложить все шаблоны, которые Вы знали до того и подняться на другой уровень абстракции. А именно, нужно перестать мыслить такими понятиями, как DI (dependency injection), REST, MVC, ORM, RPC, шаблонизаторы, компоненты, сокеты, промисы и прочее - это все технологии. Что же нужно понять это: слои (layers), модули, контракты, адаптеры, клиент-сервер, 3-звенная архитектура, микросервисы, СМО (системы массового обслуживания), и т.д. Где так все собрано в одном месте - не могу сказать, я лично по крупицам все осваивал, на что положил 20 лет профессиональной деятельности. Почитайте про ISO/OSI, загляните в три мои статьи habrahabr.ru/post/227753 и habrahabr.ru/post/204958 и habrahabr.ru/post/117791 Раньше хорошие статьи по архитектуре были на www.osp.ru но, к сожалению, давно не читал его. Можно начать с книг Гради Буча и освоения UML, этот дядька сформировал достаточно полный подход и методологию проектирования программных систем, которая ведет правильным путем, но на практике, в каждом отдельном случае может быть заменена интуицией архитектора и существенно упрощена. Удачи!
    Ответ написан
    6 комментариев
  • Как в NodeJS сделать EventEmitter для нескольких одновременных запросов?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    https://github.com/caolan/async
    async.series({
      one: function(callback) {
        setTimeout(function() {
          callback(null, 1);
        }, 200);
      },
      two: function(callback) {
        setTimeout(function() {
          callback(null, 2);
        }, 100);
      }
    },
    function(err, results) {
      // results is now equal to: { one: 1, two: 2 }
    });
    Ответ написан
  • Сервер на Node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    С node.js все наоборот, у него веб-сервер "внутри" приложений, а не приложения "внутри" веб-сервера. Каждое приложение само и является веб-сервером. Чтобы сделать виртуалхосты, хостить много сайтов, обрабатывать много доменов, нужно запустить много экземпляров ноды и связать весь этот зоопарк в один пучок через nginx. Если каждое приложение предполагает приличную нагрузку, то нужно каждое распараллеливать при помощи cluster и потом эти кластеры уже объединять через nginx. В результате, если у Вас будет 20 сайтов на машине, то это минимум 20 процессов ноды, а то и все 100. Есть альтернативное решение - сервер приложений, который перевлрачивает мир обратно с головы на ноги, т.е. на модель "внутри" сервера приложений много приложений: habrahabr.ru/post/247543
    Ответ написан
    Комментировать
  • Как хранить в бд id socket'a для отправки сообщений?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Не нужно хранить в базах, храните в памяти, нода тоже всегда в памяти, не обязательно обращаться к внешнему процессу типа редиса. Если же процесс парадет, то и его соединения падают и эти ID уже ни кому не нужны. Если процессов несколько, то используйте шины сообщений, ZeroMQ, RabbitMQ и т.д.
    Ответ написан
  • Популярен ли node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Есть такая тенденция, что все хотят специалиста с уже высоким уровнем знаний и большим опытом на ноде, и спрос на программистов высокого уровня большой, а то время, как начинающий нодоский программист практически не имеет шансов найти работу.
    Ответ написан
    Комментировать
  • Какие есть удобные способы вывода отладочной информации на консоль?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Между фронтендом и бекендом, это где это такое место есть?
    Почему бы не писать все это в mongo тли релционку, тогда будет удобно делать выборки, а софта для работы с БД побольше будет и он поудобнее, чем консольные.
    Ответ написан
    Комментировать