Очень простое Node-приложение


Содержание

Создание простого блога на Node.js

В этой статье мы покажем вам, как создать простой блог с помощью Node.js и Cosmic JS. Давайте начнем.

Прим. перев. Также вы можете посмотреть наш материал по созданию простого мессенджера с использованием Node.js.

Начало

Убедитесь, что у вас установлена платформа для разработки Node.js , если нет, то посетите веб-сайт Node.js, чтобы скачать последнюю версию.

Теперь установите пакетный менеджер Yarn , который понадобится для установки зависимостей будущего блога:

Потом создайте папку для блога. Выполните в терминале следующие команды:

На следующем этапе создайте файл package.json , чтобы импортировать все зависимости для блога и добавьте в него следующие строки:

В этом файле объявлены зависимости, которые необходимо установить для разработки и запуска блога:

  1. Модуль Cosmic JS Node , чтобы получать данные с Cosmic JS Bucket.
  2. Веб-фреймворк Express .
  3. Пакет Hogan для обработки шаблонов.
  4. Модуль Nodemon для удобства разработки — он автоматически перезагружает приложение, когда в нем произошли изменения.

Выполните следующую команду, чтобы установить зависимости:

Разработка блога

Далее нужно сформировать главную страницу блога. Создайте файл под названием app.js и добавьте в него следующие строки:

Поясним, что происходит здесь:

  1. Производится импорт модулей Express, Cosmic JS и т.д.
  2. Присоединяются верхний и нижний колонтитулы.
  3. При запросе («/») происходит вызов Cosmic JS Bucket для вывода постов и возвращается шаблон index.html .
  4. Добавляются данные на страницу в виде глобального хранилища данных — cosmic . Эта структура данных делает вашу реализацию шаблона интуитивной.

Добавление переменных шаблона домашней страницы

Эта часть процесса является наиболее интересной, потому что она показывает мощь Cosmic JS в сочетании с системой шаблонов Mustache.

Создайте папку под названием views :

Создайте файл index.html в этой папке и добавьте в него следующие строки:

Что здесь происходит:
1. Формируется заголовок (header) с переменными Mustache .
2. Извлекаются данные Cosmic с помощью переменной Mustache <> , которая имеет все необходимое для компоновки динамических данных нашей страницы.
3. Проход по <<>>cosmic.objects.type.posts и вывод постов в блоге.

«КРОК», Москва, Троицк, Санкт-Петербург, Нижний Новгород, Самара, Иркутск, Пермь, Краснодар, Воронеж, Челябинск, от 120 000 до 240 000 ₽

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

Заключение

Эта сокращенная версия блога доступна для загрузки на странице Cosmic JS Apps. Полная версия блога включает в себя страницу со всеми постами, а также страницу с постами каждого автора. Просмотрите полную версию кода на GitHub и разверните блог с помощью нескольких кликов на панели инструментов Cosmic JS, установив блог в Cosmic JS Bucket.

Frontender Magazine

Сейчас нет недостатка в обучающих материалах по Node.js, но большинство из них охватывают либо какие-то конкретные варианты использования, либо темы, применимые уже тогда, когда у вас есть работающий Node.js То тут, то там я вижу комментарии вроде «я скачал Node.js, что теперь?». Статья ответит на этот вопрос и объяснит, как начать с самого начала.

Что есть Node.js?

Много путаницы у новичков в Node.js возникает из-за непонимания того, что же на самом деле это такое. И описание на nodejs.org не слишком помогает разобраться.

Важно понять, что Node — это не веб-сервер. Сам по себе он ничего не делает. Это не Apache. Там нет конфиг-файла, в котором указывается путь до HTML-файлов. Если вам нужен HTTP-сервер, вам нужно написать HTTP-сервер (с помощью встроенных библиотек). Node.js — это просто ещё один способ выполнять код на вашем компьютере. Это просто среда для выполнения JavaScript.

Установка Node

Установить Node.js очень просто. Если вы используете Windows или Mac, установочные файлы доступны на странице загрузки.

Я установил Node, что теперь?

Сразу после установки вам становится доступна новая команда node . Её можно использовать двумя разными способами. Первый способ — без аргументов. Откроется интерактивная оболочка (REPL: read-eval-print-loop), где вы можете выполнять обычный JavaScript-код.

В примере выше я написал console.log(‘Hello World’) в оболочке и нажал Enter. Node.js выполнит этот код, и мы увидим сообщение. undefined после него выводится потому, что оболочка отображает возвращаемое значение каждой команды, а console.log ничего не возвращает.

Кроме того, мы можем передать Node файл с JavaScript для выполнения. Именно так вы и будете практически всегда делать.

Теперь запустим его в терминале:

В этом примере я переместил console.log в файл, который затем передал команде node в качестве аргумента. Node затем запускает JavaScript из этого файла и выводит Hello World .

Делаем что-нибудь полезное — работа с файлами

Просто выполнять код JavaScript весело и всё такое, но не очень полезно. Вот почему Node.js также включает в себя мощный набор библиотек (модулей) для серьёзных задач. В этом первом примере я собираюсь открыть файл с логами и обработать его.

Неважно, что означают данные в логах, но по существу каждое сообщение содержит дату, букву и значение. Допустим, я хочу просуммировать значения для каждой буквы.

Сперва нам нужно считать содержимое файла.

Работать с файлами в Node.js очень просто благодаря встроенному модулю файловой системы fs . Этот модуль содержит функцию readFile, принимающую в качестве аргументов путь до файла и коллбэк. Коллбэк вызовется, когда завершится чтение файла. Данные из файла поступают в виде объекта типа Buffer, по сути представляющего собой массив байтов. Мы можем перевести его в строку с помощью функции toString().

Теперь давайте займёмся обработкой логов. Это вполне себе обычный код JavaScript, поэтому я не буду вдаваться в детали.

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

Я часто использую Node.js для таких задач. Это простая и мощная альтернатива bash-скриптам.

Асинхронные коллбэки

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


Это особенно важно для веб-серверов. Доступ к базам данных в современных веб-приложениях — обычное дело. Пока вы ждёте ответа от базы, Node.js может обработать ещё запросы. Это позволяет вам обрабатывать тысячи одновременных соединений с очень маленькими затратами, сравнимыми с созданием отдельного потока для каждого соединения.

Делаем что-нибудь полезное — HTTP-сервер

Как я уже говорил ранее, Node.js не делает ничего «из коробки». Один из встроенных модулей позволяет без особых усилий создать простой HTTP-сервер, указанный в примере на сайте Node.js.

Когда я говорю, «простой», это значит «простой». Это не навороченный HTTP-сервер. Он не работает с HTML или изображениями. Фактически, что бы вы ни запросили, он вернёт Hello World . Тем не менее, можете запустить его, зайти на http://localhost:8080 в браузере и увидеть этот текст.

Возможно, вы заметите небольшую разницу: ваше приложение не завершает работу. Так происходит потому, что вы создали сервер, и теперь он будет продолжать работать и отвечать на запросы до тех пор, пока вы не убьёте node сами.

Если вы хотите превратить это приложение в полноценный веб-сервер, то вам придется потрудиться. Вам нужно будет проверять, что запрошено, читать соответствующие файлы и отсылать назад контент. Впрочем, есть и хорошая новость: другие уже сделали эту тяжкую работу за вас.

Делаем что-нибудь полезное — Express

Express — это фреймворк, делающий создание большинства сайтов очень простым. Первое, что вам нужно будет сделать — установить его. Вместе с командой node у вас появилась команда npm . Этот инструмент даёт вам доступ к колоссальному количеству модулей, созданных сообществом, и Express как раз один из них.

Установленный модуль расположится в папке node_modules внутри каталога с вашим приложением. Оттуда вы сможете подключать его так же, как любой встроенный модуль. Давайте создадим с помощью Express простой сервер, отдающий статику.

Теперь у вас есть довольно мощный сервер для статического контента. Всё, что вы сложите в папку /public , может быть запрошено из браузера и будет отображено. HTML, изображения, почти всё, что душе угодно. Например, если вы положите изображение с именем my_image.png в эту папку, его можно будет запросить по адресу http://localhost:8080/my_image.png . Разумеется, у Express намного больше возможностей, но их вы можете открыть для себя, продолжив изучение самостоятельно.

Мы уже немного ознакомились с npm в предыдущем разделе, но я хотел бы подчеркнуть важность этого инструмента в контексте разработки на Node.js. Вам доступны тысячи модулей, решающих практически все типичные задачи, с которыми вы, возможно, столкнётесь. Не забывайте проверить существующие модули перед тем, как изобретать велосипед. Для приложения на Node.js нормально иметь массу зависимостей.

В предыдущем примере мы установили Express вручную. Если у вашего проекта много зависимостей, то устанавливать их таким образом не очень удобно, поэтому npm использует файлы package.json .

Файл package.json содержит общие сведения о вашем приложении. Он может содержать множество настроек, но выше указан необходимый минимум. Секция dependencies описывает имя и версию модулей, которые вы хотите установить. В данном случае подойдёт любая версия Express 3.3. Вы можете перечислить в этой секции столько зависимостей, сколько захотите.

Теперь вместо установки зависимостей по одной мы можем установить все сразу командой:

При запуске этой команды npm будет искать package.json в текущей директории, и если найдёт, то установит каждую указанную в нём зависимость.

Организация кода

Итак, до этого момента мы работали только с одним файлом, что не очень хорошо с точки зрения поддержки кода. В большинстве приложений вы будете распределять код между несколькими файлами. На данный момент какого-либо стандарта или рекомендуемой структуры файлов не существует. Это не Rails. Здесь нет концепта «представления идут сюда, а контроллеры — сюда». Можете делать так, как захотите.

Давайте проведем рефакторинг скрипта, обрабатывающего логи. Его будет легче поддерживать и тестировать, если мы выделим логику парсера в отдельный файл.

Я создал новый файл, содержащий логику для парсинга. Это просто JavaScript, и существует множество способов инкапсуляции этого кода. Я предпочитаю заводить новый объект, потому что так легче проводить юнит-тестирование.

Важная часть в этом коде — строка с module.exports . Она объясняет Node.js, что вы выносите из этого файла. В данном случае я выношу конструктор, чтобы пользователи могли создавать экземпляры моего объекта Parser . Вы сможете выносить то, что сами захотите.

Давайте теперь посмотрим, как импортировать этот файл и использовать новый объект Parser .

Файлы подключаются точно так же, как и модули, за исключением того, что вместо имени модуля нужно писать путь. Расширение .js подразумевается по умолчанию, так что можете опустить его, если хотите.

Так как я вынес в модуль конструктор, то он и вернётся выражением require . Теперь я могу создавать экземпляры Parser и использовать их.

Простейшее web приложение на Node.js

Node.js – это платформа, которая превращает JavaScript из узкоспециализированного «браузерного» языка в язык программирования общего назначения. В частности Node.js позволяет использовать JavaScript в web приложениях на стороне сервера, что раньше было невозможно.

Рассмотрим пример создания простейшего web приложения на Node.js, которое будет работать на сервере и отображать в браузере следующую тестовую страницу:

Вначале подключим библиотеку http для создания сервера и определим порт для его работы.

Далее создадим H TTP сервер и при помощи метода listen з ададим ему порт для прослушивания.

Анонимная функция в приведённом примере является обработчиком HTTP запросов. Параметр req- представляет собой объект запроса к серверу из вне, а параметр res, соответственно, объект ответа на этот запрос.

Этого уже достаточно для работы приложения, но в текущем виде оно не будет выполнять никаких действий.

Чтобы наше приложение всё-таки отобразило приведённую ранее страницу, при помощи метода writeHead зададим HTTP заголовок ответа на запрос (в нём мы передаём код состояния (200 — « Ok ») и тип содержимого ( HTML)) при помощи метода end запишем в ответ само содержимое страницы .

Как всё это выглядит в исходном коде показано ниже.

Node.js — Фреймворк Express

Дата публикации: 2020-12-27

От автора: Node js Express — это минималистичный и гибкий фреймворк веб-приложений Node.js, который предоставляет набор функций для разработки веб- и мобильных приложений. Он существенно упрощает разработку веб-приложений на базе Node. Ниже приведены некоторые из основных функций фреймворка Express.

Позволяет настроить посредников для ответа на запросы HTTP.

Определяет таблицу маршрутизации, которая используется для выполнения различных действий на основе метода HTTP и URL-адреса.

Позволяет динамически создавать HTML-страницы на основе передачи аргументов шаблонам.

Установка Express

Во-первых, глобально установите фреймворк Express с помощью NPM, чтобы его можно было использовать для разработки веб-приложений через терминал Node.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Приведенная выше команда устанавливает фреймворк локально в каталоге node_modules и создает внутри каталога node_modules каталог express. Вместе с express необходимо установить следующие основные модули:

body-parser — это middleware node.js для обработки кодированных данных JSON, Raw, Text и URL.

cookie-parser — обрабатывает заголовоки Cookie и передает в req.cookies объект с именами cookie.

multer — это middleware node.js для обработки multipart/form-data.

Пример приложения Hello world

Ниже приведено очень простое приложение Express, которое запускает сервер и прослушивает порт 8081. Это приложение выдает ответ Hello World! на запросы к главной странице. На запросы ко всем остальным путям предоставляется ответ 404 Not Found.


Сохраните приведенный выше код в файле с именем server.js и запустите его с помощью следующей команды.

В результате вы должны получить следующее:

Перейдите по адресу http://127.0.0.1:8081/ в любом браузере.

Ответ на запрос

Приложение Express использует функцию обратного вызова, параметрами которой являются объекты request и response.

Объект Request − Объект request представляет HTTP-запрос и содержит свойства для строки запроса, параметров, тела, заголовков HTTP и т. д.

Объект Response – Объект response представляет HTTP-ответ, отправляемый приложением Express, после получения HTTP-запроса.

Вы можете вывести объекты req и res, которые предоставляют различную информацию, связанную с HTTP запросом и ответом, включая файлы cookie, сессии, URL-адреса и т. д.

Базовая маршрутизация

Мы рассмотрели простейшее приложение, которое обслуживает HTTP-запрос к главной странице. Маршрутизация обрабатывает то, как приложение будет обрабатывать запрос клиентов к конкретной точке, которая представляет собой URI (или путь) и конкретный метод HTTP-запроса (GET, POST и т. д.). Мы расширим нашу программу Hello World, чтобы она обрабатывала больше типов HTTP-запросов.

10 самых популярных сайтов и мобильных приложений, созданных с помощью Node.JS

Перевод статьи Пареша Сагара «Most Popular 10 Websites and Mobile Apps Built with Node.JS».

Вам любопытно, какие сайты и мобильные приложения используют Node.JS? Хотите погрузиться в последние тенденции разработки приложений на Node.JS?

С вашего согласия я представлю 10 самых популярных сайтов и мобильных приложений, построенных с его помощью.

Сегодня многие мобильные и веб-приложения создаются с использованием фреймворков Node JS. Я расскажу о 10 самых крупных сайтах и мобильных приложениях, созданных с их помощью. Начиная с 2012 года среда NodeJS достигла огромных успехов. Она пользуется самой большой популярностью при созданииприложений, действующих в режиме реального времени, и быстро масштабируемых мобильных и веб-приложений.

Приложения, построенные на Node.JS, более удачны в социальном плане и более выгодны в техническом отношении, чем их существующие соперники на PHP, Python и ROR. Все компании, использующие Node.JS, согласны, что этот выбор дает преимущество при создании приложений. Вам любопытно, какие компании его используют и почему?

Прежде чем мы приступим к рассмотрению списка самых известных сайтов и мобильных приложений, построенных на Node.JS, позвольте рассказать вам немного о самом фреймворке.

Что такое Node.JS?

Говоря простыми словами, Node.JS это среда для запуска приложений. Node JS это бэкенд-платформа, используемая Node.JS-разработчиками для создания серверных и сетевых приложений. Это популярная open source платформа для разработки серверных и сетевых приложений с возможностью запуска на распределенных устройствах. Платформа построена на движке JavaScript V8 от Google Chrome.

Проекты Node.JS делают возможным построение ваших собственных приложений с помощью всего лишь одного языка, JavaScript. Раньше над этим работали разные команды, использовавшие разные языки для фронтенда и бэкенда.

Илон Маск рекомендует:  Что такое код asp logextfileprotocolversion

Каковы преимущества использования Node.JS?

Большинство современных стартапов верят в методологию «бережливого стартапа». Они нацелены на уменьшение цикла разработки продукта с помощью новых экспериментальных технологий. Поэтому Node.JS является прекрасным выбором для таких компаний. Разработка на Node.JS дает пользователям целый ряд преимуществ:

  • Node.JS использует один и тот же язык для серверной и клиентской части, что уменьшает необходимое число разработчиков по сравнению с платформами, использовавшимися ранее.
  • С использованием Node.JS приложения, работающие в режиме реального времени (например, чаты, сервисы заказов и транзакций), поднимаются на новую высоту.
  • Для стартапа изменение направления может стать неизбежностью. Многие известные имена среди стартапов достигли успеха благодаря изменению первоначальной бизнес-модели. С помощью Node.JS внесение изменений в ваше приложение проходит более гладко.

Если вам нужно больше информации о преимуществах использования Node.JS и о том, как нанимать разработчиков на Node.JS, посетите эту страницу.

Netflix

Netflix в настоящее время является самой крупной мировой платформой потокового видео для фильмов и сериалов. Им пользуются 125 млн. пользователей из почти 200 стран, причем 56 млн. пользователей приходится только на США. (Источник — Statista)

Обслуживание такого ошеломляющего числа персонализированных потоков является огромной операцией, выполняемой фреймворком Node.JS.

Согласно Кристоферу Бакстеру, Node.JS улучшил время загрузки Netflix на 70%.

Разработчики Netflix для оценки улучшений используют показатель TTI (time to interact – «время до взаимодействия»). Это время между запуском приложения и моментом, когда пользователь может начать с ним взаимодействовать.

С учетом огромного количества пакетов персонализированного контента каждый push-цикл замедляет масштабируемость приложения, поэтому Netflix решил перейти на легковесный и быстрый Node.JS. При создании многих других приложений, подобных Netflix, также используется Node.JS.

Это самый большой транспортный стартап в мире, имеющий 40 миллионов активных пользователей ежемесячно и 5,5 млн. поездок в день. Он нуждался в платформе, которая обеспечивала бы отслеживание в реальном времени и навигацию для этих ежедневных 5,5 млн. поездок. Для выполнения этой задачи Uber выбрал платформу для разработки приложений Node.JS. (Источник – BusinessofApps).

Uber увидел три главных преимущества, которые приложение на Node.JS может обеспечить их начинаниям в будущем:

  • Высокая вычислительная мощность, которая может помочь быстро получить доступ к большому количеству информации.
  • Большая оптимизация вследствие участия многих open source сообществ Node.JS.
  • Ошибки могут быть устранены без прерывания работы серверов.

Имея в своем арсенале Node.JS, Uber теперь может управлять 2 миллионами удаленных вызовов процедур (RPC) в секунду.

Paypal

Paypal это одна из самых больших компаний, использующих Node.JS. У него 227 миллионов активных пользовательских аккаунтов в больше чем 200 странах (по состоянию на 2020 год). Это делает Paypal одним из самых популярных сайтов, построенных с помощью приложения Node.JS. Node.JS использовался для создания клиентского веб-приложения Node.JS.

Создание приложения с помощью Node.JS заняло всего половину времени, которое ранее требовалось для создания приложений на основе Java. Создание целого Node.JS-приложения потребовало на 33% меньше строк кода и на 40% меньше файлов.

Джефф Харрел, старший директор по платежным продуктам и инженерной части в PayPal, высказался в пользу веб-приложения на Node.JS:

«Node.JS помогает нам решать проблему связи между браузером и сервером. Это стало возможно благодаря тому, что как браузерная, так и серверная часть приложения написаны на JavaScript. Это объединяет наших специалистов-инженеров в одну команду, что позволяет нам понимать и реагировать на нужды наших пользователей на каждом уровне технологического стека».

eBay это один из самых известных сайтов, управляемых Node.JS. Он имеет 170 миллионов пользователей по всему миру, включая пользовательские и продуктовые компании. Он предлагает торговую платформу e-commerce для сделок типа потребитель-потребитель и бизнес-потребитель. (Источник – Statista)

eBay столкнулся с необходимостью сделать свой сайт более отзывчивым в режиме реального времени. Здесь и вышел на сцену Node JS, поскольку это было единственное надежное решение, которому eBay мог доверить свой огромный e-commerce трафик.

Красота Node.JS-приложения, созданного eBay, в том, что они следовали принципу «Создай один раз, разворачивай везде и автоматизируй остальные модули». Это сделало eBay одним из величайших примеров применения Node.JS в приложениях.

Сентил Падманабхан, главный веб-инженер eBay, сказал: «У нас было два основных требования к проекту. Первое заключалось в том, чтобы сделать приложение как можно более подходящим для работы в реальном времени и при этом обслуживать живые соединения на сервере. Второе касалось организации огромного количества сервисов eBay, отображающих информацию на странице».

GoDaddy

У GoDaddy в управлении больше 55 миллионов доменов с примерно 150 тыс. доменных транзакций в день. Это делает GoDaddy крупнейшим мировым регистраром. И то, что это одна из компаний, использующих Node.JS, создает прекрасную репутацию это платформе. (Источник – GoDaddy)

Для поддержания своего высокого положения им нужно постоянно обновляться. Node.JS дает возможность выпускать новые функции с помощью качественного приложения и простых интеграционных тестов. Node.JS делает возможным для GoDaddy выполнять ту же загрузку с помощью всего 10% используемых ранее аппаратных средств.


Антонио Сильвера, вице-президент GoDaddy, заявил:

«Мы сейчас используем практически в 10 раз меньше серверов для размещения сайтов наших пользователей. Мы существенно снизили показатель TTFB (Time-To-First Byte – время от HTTP-запроса до получения первого байта страницы клиентским браузером) с примерно 60 до 12 миллисекунд. Производительность это ключевое различие, если мы говорим о веб-приложениях, включая лучшую позицию в результатах поиска Google».

Благодаря применению Node.JS сервера GoDaddy были заметно сокращены — с 15 до 4, при удваивании пропускной способности. Приложение Node.JS работает в 10 раз быстрее на стороне клиента.

LinkedIn

LinkedIn это бизнес-ориентированный сайт-социальная сеть с 467 млн. пользователей из больше чем 200 стран. Сайт был основан в 2002 году и недавно приобретен Microsoft за $26 млрд. Приложение сайта доступно на 24 языках.

LinkedIn использовал Node.JS для улучшения серверной части своего мобильного приложения. Благодаря этому приложение стало работать в 20 раз быстрее и задействовать лишь часть ресурсов по сравнению в показателями, которые были при применении Ruby on Rails. (Источник – Statista)

По словам Кирана Прасада, заведующего мобильной разработкой в LinkedIn, «Одной из причин был масштаб. Во-вторых, если вы посмотрите на Node, он лучший во взаимодействии с другими сервисами».

LinkedIn, возможно, является наилучшим примером как сайта, так и приложения, созданного с использованием Node.JS разработки.

Walmart

Walmart, самая большая мировая сеть розничной торговли, занялась онлайн-продажами для расширения свих горизонтов. Они выбрали Node.JS для создания своего онлайн-приложения для торговли, поскольку поверили в его потенциал. В Node.JS Walmart заинтересовал его асинхронный ввод/вывод и однопоточная модель цикла, способная обрабатывать конкурентные запросы.

Node.JS был гигантским прыжком для Walmart, который обернулся для них хорошей экономией ресурсов.

Yahoo

Американская технологическая компания, предлагающая множество сервисов, таких как поисковик, веб-портал и многие другие. Все сервисы Yahoo дают ему в общей сложности 1 млрд. пользователей, причем 225 млн приходится только на почту. Приложение на Node.JS изменило всю культуру фронтенд-разработки в Yahoo. (Источник – DMR).

Эрик Ферраиуоло, главный инженер ПО в Yahoo, поясняет:

«Вы можете сделать его масштабируемым, он очень эффективен, и каждое свойство, которое мы переместили в стек Node.js, показало рост производительности».

Node.js уже стоит за многими сайтами Yahoo, а вскоре будет заправлять всем.

Groupon

Как и eBay, Groupon это один из сайтов, построенных с помощью Node.JS. Это мировая e-commerce платформа, где пользователи могут связываться с местными частными продавцами товаров и услуг. Groupon обслуживает 49,5 млн пользователей по всему миру. В июне 2015 года он перешел с Ruby on Rails к созданию приложений на Node.JS. (Источник – Statista).

Node.JS приложение и веб-страницы Groupon стали на 50% быстрее даже при обслуживании большего трафика, чем при использовании Ruby on Rails.

Адам Гейтгей из Groupon заметил:

«Мы обслуживаем то же количество трафика с помощью меньшего количества аппаратных ресурсов по сравнению со старым стеком. Команды могут деплоить изменения в свои приложения независимо друг от друга. Мы можем создавать функционал для всего сайта и вносить изменения гораздо быстрее, чем могли с нашей старой архитектурой».

Mozilla

Mozilla это сообщество, созданное членами Netscape и занимающееся бесплатным программным обеспечением, в частности, инструментами навигации и веб-браузером. Эти инструменты поддерживают больше 80 языков и работают на разных ОС: Windows, Linux, OS X, Firefox OS. Это все еще второй по популярности веб-браузер в мире, несмотря на то что на него припадает только 15% использования. Mozilla это один из лучших примеров веб-приложений, использующих Node.JS.

Марк Майо, главный инженер в Mozilla, сказал:

«Мы сделали уверенный выбор в пользу Node по двум причинам. Одна из них – объем занимаемой памяти, а вторая – возможность использовать один и тот же язык для бэкенда и фронтенда. Это очень помогло всей команде».

Запуск приложения Node.js в фоновом режиме

Допустим, мы создали приложение Node.js и хотим, чтобы при выходе из консоли после запуска через npm start/node index.js через команду Ctrl + C или из ssh — клиента наше приложение продолжало выполняться, как нормальный сервер. Для этого есть несколько способов, чтобы это решить.

Запуск в фоновом режиме при помощи nohup

Традиционный подход заключается в том, чтобы запустить команду, используя nohup:

Эта строчка говорит о том, чтобы мы запустили приложение Node.js в фоновом режиме, а все логи записывались в файл output.log.

Использование модуля Forever

Цель Forever — постоянно поддерживать дочерний процесс (например, веб-сервер node.js) и автоматически перезапускать его при неожиданном выходе из него.

Установить данный модуль можно следующей командой:

Самые простые команды для использования данного модуля — это четыре простые задачи командной строки: start, stop, stopall, list:

Чтобы использовать Forever, как долговременный процесс, нужно запустить процесс через команду «start». Имея эти задачи, запуск сценария nodejs с Forever прост:

Первая команда запускает скрипт simple-server.js в фоновом режиме с помощью daemon.node и возвращает управление текущему процессу оболочки. Вторая команда перечисляет все процессы, выполняемые с Forever. Идентификаторами после имени сценария являются идентификаторы процесса целевого скрипта и демона, которые будут запущены всегда, пока работает сервер. Мы можем подтвердить это, просмотрев список процессов:

Чтобы проиллюстрировать, что Forever автоматически перезапустит дочерний процесс, который, каким-либо образом был закрыт в процессе перезагрузки или ошибки. Для этого давайте принудительно убьем запущенный процесс и проверим перезапустит ли Forever его:

Как вы видите, идентификатор процесса целевого скрипта «simple-server.js» изменился с 24597 до 24611, что указывает на то, что новый процесс был запущен Forever. Таким образом, наш целевой скрипт будет работать непрерывно, но как мы его остановим? Остановка процесса с Forever проста из командной строки. Нам просто нужно передать индекс этого процесса из списка «вечный список» на остановку:

Существуют некоторые параметры по умолчанию и соглашения о конфигурации, о которых вам следует знать при использовании Forever:

  1. Forever отслеживает запущенные процессы в файлах * .fvr, которые помещаются в /tmp/forever/pids;
  2. Каждый процесс Forever будет генерировать уникальный файл журнала, помещенный в /tmp/forever/*.log;
  3. Если не указано иное, вывод дочернего процесса stdout и stderr будет записан в указанный выше файл журнала.

Подробнее об этих параметрах можно узнать из использования Forever и документации по Github .

Использование модуля PM2

Последняя стабильная версия PM2 устанавливается через NPM:

Самый простой способ запустить, демонзировать и контролировать ваше приложение — это использовать эту командную строку:

Можно, также, декларировать управление несколькими приложениями, для этого нужно создать файл конфигурации со следующим содержимым:

И далее очень просто их запускаем:

Подробнее об объявлении приложения читайте здесь .


Перезапуск PM2 с процессами, которые вы выполняете при загрузке / перезагрузке сервера, имеет решающее значение. Чтобы решить эту проблему, просто запустите эту команду для создания активного сценария запуска:

Вот некоторые команды, которые стоит знать:

Пожалуй, основные из вышеизложенного списка:

Если используется фреймворк express, то команда запуска приложения в демон-режиме будет выглядеть так:

или просто, без дополнительного мониторинга:

Серверный JavaSсriрt: знакомимся с Node.JS

Содержание статьи

Посторонись, пресловутый PHP! Долой Java! Старичок Perl, тебе так вообще давно пора на пенсию. И как же вы уже достали, попсовые Ruby и Python! Все эти давно знакомые технологии уже не торкают. Зато сегодня мы посмотрим на чрезвычайно прогрессивный подход, когда для написания серверного кода используется… JavaScript.

Есть идея для стартапа. Теперь вопрос: на чем его писать? Конечно, есть всеми любимый РНР — что может быть легче для веб-сайта! Но скажи честно, как-то не тянет, правда? Ведь чтобы сделать что-то стоящее, голого РНР не хватит. Сразу придется прикручивать еще и AJAX, чтобы данные незаметно подгружались без обновления всей страницы целиком, да и это не решит всех проблем. О том, что PHP не так хорош, ты задумаешься в тот самый момент, когда к тебе разом ломанется много народа. А все потому что РНР (как и подавляющее большинство других языков, на которых строят сайты) даже в нашем, черт подери, двадцать первом веке, работают по классической схеме «запрос-ответ». Запрос страницы заставляет веб-сервер поднять указанный скрипт, выполнить его (линейно, строка за строкой весь твой код), а результат возвратить браузеру клиента. После этого скрипт «умирает», а следующий же запрос запустит всю эту адскую машинку заново. А если таких запросов одновременно тысяча? Старый добрый подход называется CGI (интерфейс взаимодействия веб-сервера и интерпретатора языка, на котором написана страница). Хитрые надстройки вроде FastCGI расширяют протокол, позволяя избежать выгрузки скрипта после первого запроса. Таким образом, когда второй пользователь запросит ту же страницу, для него будет уже все готово, останется только выполнить скрипт с новыми параметрами. Но все эти ухищрения — все равно не то.

Что такое хорошо, а что такое плохо

Многие разработчики всегда считали JavaScript просто «примочкой» к браузеру, эдаким недоязыком, который годится разве что для управления формами и манипулирования DOM-деревом веб-страницы. Некоторые до сих пор думают, что «java» в названии что-то да значит! �� Действительно, язык очень простой. Впрочем, настоящие программисты давно научились творить с его помощью чудеса, предоставив нам потрясающе удобные онлайн-сервисы, которыми мы ежедневно пользуемся. Многие из таких профи пошли дальше и, трезво посмотрев на сам язык и его возможности, особенно по части работы с событиями, решили: а что если на JavaScript написать сервер? Ты получаешь возможность написать на одном и том же языке все части сайта: что серверную часть, что саму клиентскую страничку. Кроме того, JS отлично, просто идеально подходит для разных веб-штучек. Он очень простой и одновременно гибкий, что позволяет писать код в разных парадигмах: от обычного процедурного до ООП в смеси с функциональным стилем. А главное — это тотальная асинхронность. Это значит, что твой код будет выполняться не последовательно, как в случае с PHP/Perl-скриптами, а именно в тот момент, когда для него будут готовы все данные. Ведь для веба не надо большой вычислительной мощности — большую часть времени сервер ожидает событий вроде получения данных формы, выборки из базы данных или, что еще хуже, ответа на запрос к другому серверу. Обычный РНР-скрипт в такое время простаивает, а значит, простаивает весь поток, не позволяя серверу задействовать его для других пользователей. В такой ситуации не спасает даже Nginx. В случае с JavaScript ты просто указываешь, какую функцию необходимо выполнить, когда произойдет определенное событие, и все. В это время другой код может спокойно выполняться. Такая функция называется callback, или обработчик событий. Хотя писать действительно сложный код в таком стиле немного неудобно, особенно если твоя функция зависит от нескольких событий сразу, но и для этого уже придумали свои фреймворки, зачастую гораздо более мощные и элегантные, чем все эти РНР/Ruby/Python.

А к чему она вообще, эта асинхронность?

Для примера ограничений последовательного выполнения кода рассмотрим два типовых примера кода на PHP и JavaScript, выполняющих одно и то же. Начнем с любимого PHP:

$result = $db->fetchOne(‘SELECT user_name FROM user_accounts WHERE > echo ‘Мое имя: ‘ . $result . ‘;’;

В первой строке мы посылаем простой SQL-запрос к БД на выборку имени пользователя, у которого >

db.query(‘SELECT user_name FROM user_accounts WHERE > <
if (!err) sys.log(‘Мое имя: ‘ + res);
>);
sys.log(‘Продолжаем выполнение’);

Тут опять же создается запрос к базе данных, однако кроме самого SQL-выражения в запросе передается еще и функция-обработчик (callback). Эта функция будет вызвана именно тогда, когда придет ответ от базы данных, а до этого момента выполнение скрипта ни в коем случае не будет стопориться. Для примера в следующей строке мы просто выводим строку в консоль, чтобы показать, что выполнение сценария продолжается сразу после формирования запроса, не ожидая его завершения. Собственно, в основе любого варианта серверного JavaScript заложена концепция событий и callback’ов, то есть обработчиков событий. Ты можешь описывать собственные события. Тогда ход выполнения приложения будет зависеть от событий, которые возникают в результате активности пользователя на странице («форма заполнена» или «новое сообщение» и т.д.) или генерируются внутри самого сервера (как, например, в случае с обращением к базе данных). Те действия, которые необходимо выполнять в случае наступления событий, описываются внутри функций обработчиков событий.

Движок, вот в чем вопрос

Короче говоря, использовать JavaScript не только для клиентской части, но и на серверной стороне — это хорошо и даже приятно. Другой вопрос — каким образом это возможно осуществить? Сегодня есть четыре основных движка, которые используются на серверах.

Rhino — движок от компании Mozilla, написанный на Java и поддерживающий последнюю 1.7 версию стандарта JS, который к тому же дополняет язык собственными расширениями и объектами. Основным преимуществом движка является работа поверх стандартной JVM, а значит, его можно использовать в любой среде, где работает Java. Другими словами, можно применять современные веб-серверы типа jetty, но при этом писать на любимом JS. Кстати, Rhino применяют на облачном хостинге от Google! А вот с производительностью сложнее. Она зависит, с одной стороны, от движка и применяемых там технологий, вроде JIT-компиляции, и от работы самой Java-машины. Кстати, многие тестеры, которые говорят, что Rhino очень медленный, забывают, что движок имеет два режима работы: интерпретации, когда скрипт каждый раз преобразуется в Java байт-код (аналогично PHP), и компиляции, когда такое преобразование происходит только раз, а потом многократно исполняется. Первый режим выгоден, когда ты отлаживаешь код, который меняется каждую минуту, второй больше подходит для рабочей версии проекта, работающей под нагрузкой.

Илон Маск рекомендует:  Что такое код declare table

SpiderMonkey — еще один движок от Mozilla, на этот раз на C. Кстати, это вообще первый в мире движок JS, написанный еще в Netscape — сегодня он открыт и используется в таких популярных продуктах как Firefox, Adobe Acrobat и даже в одном из эмуляторов серверов онлайн-игры Ultima Online. Далее разработчики сильно модифицировали его, добавив компиляцию JS напрямую в ассемблерный код, и переименовали в TraceMonkey — именно этот движок используется в ветке 3.6 Firefox’а. В основном SpiderMonkey используют в ПО, которое написано на С/С++ и нуждается в скриптовом языке. Из известных продуктов: Comet-сервер APE, noSQL БД CouchDB, серверная платформа Jaxer и модуль к Apache mod_js.

Futhark — это движок от Opera, который, кроме браузера, используется в их инновационном сервисе Unite (типа встроенный сервер в каждом браузере), а также на их серверах, обслуживающих мобильный браузер Opera Mini. Жаль, что движок закрыт, и его пока нигде за пределами самой Opera не применяют.

V8 — движок от Google, который используется в Chrome и является основой будущей Chrome OS. Сегодня это самый крутой, быстрый и мощный движок, в котором JS-код напрямую преобразуется в ассемблер целевого процессора, что позволяет обойти по скорости все остальные движки. Кроме этого гугловцы используют множество ухищрений для оптимизации, хранят в памяти скомпилированный код, оптимизируют его на лету (например, удаляют блоки кода, которые по решению компилятора вообще не могут быть задействованы, и т.п.). На базе этого движка построена самая популярная и быстроразвивающаяся серверная платформа — Node.JS.

Node.JS

Вероятно, именно после выхода Chrome разработчики смекнули, что такой быстрый движок можно успешно использовать и на сервере. Первым опытом стал проект V8cgi, который просто позволял писать серверные сценарии, работающие с любым веб-сервером по стандартному протоколу CGI. Дальнейшие эксперименты привели к рождению проекта Node.JS — полностью самостоятельной платформы, включающей, кроме движка, встроенный сервер (HTTP и TCP/UDP/Unix-soket) и базовый набор библиотек, а также предоставляющей полностью асинхронную работу с файлами и сетевыми устройствами.

Проект развивается настолько быстро и активно, что уже сейчас готов к промышленному использованию. Это, в частности, доказывает опыт парней из Plurk (азиатский аналог твиттера), которые полностью перенесли свой comet-сервер, изначально написанный на Java и солидном JBoss Netty, на Node.JS и, по отзывам, сократили потребление памяти буквально на гигабайты. А масштабы у них еще те — более сотни тысяч одновременных соединений.

Запустить HTTP-сервер, способный обрабатывать асинхронно тысячи подключений — это несколько строк кода:

var sys = require(‘sys’), http = require(‘http’);
http.createServer(function (req, res)
<
res.writeHead(200, <'Content-Type': 'text/plain'>);
res.end(‘Hello Worldn’);
>).listen(80, «127.0.0.1»);
sys.puts(‘Server running at http://127.0.0.1:80/’);

Чтобы запустить сервер, скопируй код в файл example.js и укажи его при запуске демона node:

% node example.js
Server running at http://127.0.0.1:80/

Маленький тест провести очень просто. Можно взять программу Apache Bench — очень простую тулзу для проведения нагрузочного тестирования, и запустить ее: running «ab -n 1000 -c 100 ‘http://127.0.0.1:80/’». Таким образом, бенчмарк будет «обстреливать» сервер тысячами запросов, используя 100 одновременных подключений. На моем ноутбуке сервер выдержал больше 3000 запросов в секунду. Это очень много!

Сам сервер написан на C++ и совсем немножко на ассемблере, однако большая часть библиотек из дистрибутива разработана на JavaScript. В состав базового набора сервера входят только основные функции, остальное оставлено на плечах разработчиков, которые уже написали сотни разных библиотек и фреймворков. Впрочем, молодость проекта дает о себе знать: многих привычных для других решений модулей еще нет, а у многих библиотек текущая версия — 0.0.1, что не придает уверенности в их стабильности. Некоторые тривиальные задачи могут вообще не иметь готового к закачке решения, но бывает и наоборот — количество реализаций, зачастую радикально разных по архитектуре, исчисляется десятками (доступ к базе MySQL, например). Хотя большинство библиотек написано на чистом JavaScript, есть и такие, что требуют компиляции модуля к серверу, что обещает гораздо большую скорость — они просто расширяют стандартный API сервера.

Готовые наработки для серверного JavaScript

Конечно, ты можешь писать код с чистого листа, что и делают многие правильные программисты. Однако немало из таких правильных программистов создали для себя удобные каркасы и наметки, которые теперь постоянно используют и предлагают всем желающим в виде фреймворков и спецификаций. Если ты всерьез решил использовать серверный JS, то это отличный способ облегчить себе жизнь.

Narwhal — мощное решение, работающее поверх многих JS-движков. Таким образом, программистам не надо париться по поводу различия различных серверов — они могут просто писать код.

CommonJS — попытка стандартизировать платформу и дать общий API для всех движков, предлагая низкоуровневый API, а также API для подключения различных готовых модулей.

JSGI (JavaScript gate interface) — разработан специальный протокол взаимодействия связи веб-демона и серверных сценариев на JavaScript. Увы, спецификацию пока полностью поддерживает только проект Rhino в окружении сервера jetty.

Особенности Node.JS

Основной особенностью Node, кроме полной асинхронности, является его однопоточная модель. Другими словами, все операции выполняются в одном и том же потоке ОС, даже если у твоего сервера тысяча одновременных пользователей. Правда, доступно создание дочерних процессов и низкоуровневое управление исполнением скриптов (загрузка, компиляция, работа с ассемблерным кодом, исполнение). Для реализации многопоточности и задействования всех ядер современных процессоров рекомендуется просто загружать несколько копий приложения, но можно взять на вооружение WebWorker из стандарта HTML5 и распределить работу приложения по нескольким дочерним процессам. Не думай, что раз нет многопоточности — это тормоз и отстой. Вспомни, что веб-приложение делает полезную работу очень быстро, а большую часть времени просто ожидает чего-то (данных от базы, от memcached’а или новомодной NoSQL-базы), либо просто держит в памяти открытые соединения для Comet’а, поэтому в одном потоке можно обработать и десяток тысяч, не прибегая к кластеризации.

Второй особенностью архитектуры Node является событийность. Почти каждая операция имеет коллбэки, генерирует событие, а пользователю доступен объект EventEmiter, через который можно буквально одной строкой генерировать свои события (это несложно, ведь событие — это просто строка с названием, а также список параметров, которые передаются в обработчик).

Сам по себе Node построен вокруг EventLoop — глобального цикла обработки событий, который на каждом тике проверяет, готовы ли данные для какого-либо из определенных пользователем коллбэков. Если данные есть, начинается выполнение кода. Если не осталось больше кода — ожидаем следующего вызова. Цикл выполняется вне JS, а в самом движке, написанном на C, вследствие чего это происходит очень и очень быстро (порядка сотен тысяч раз в секунду). Что-то типа бесконечного цикла. В дополнение к этому в сервер встроен очень эффективный сборщик мусора (GC), поэтому даже тысячи подключений не вызывают переполнения памяти и падения сервера. Node.JS обладает встроенной родной системой работы с событиями.

Простейший Steaming-сервер

Попробуем написать простой, но в тоже время полезный пример, который в реальном времени будет выдавать пользователю полезную информацию без перезагрузки страницы. Вот идея для нашего приложения — брать новые данные, которые добавляются в текстовый лог, и выводить их в реальном времени на веб-странице:

NodeJS

Теперь самое время установить NodeJS. Сделать это очень просто:
$ apt install nodejs
Теперь мы можем наконец запустить наш скрипт:
$ node app.js

Express

Вместе с NodeJS нам доступен пакетный менеджер npm. Давайте воспользуемся им:

npm install express —save $ nano app.js


Откроем app.js и напишем/скопи-пастим туда следующий код:

var express = require(’express’), app = express(),

port = Number(process.env.PORT || 8080);

app.get(’/’, function(req, res)<

res.send(’Express is working’);

console.log(’Listening on port ‘ + port); >);

Это должно вывести в консоль номер порта по которому отвечает сервер. Если вы откроете http://localhost:8080/ в браузере, то увидите на странице следующий текст:

Чтобы избежать перезагрузки сервера вручную каждый раз при изменении файла app.js мы можем установить nodemon. Nodemon — это утилита, которая будет отслеживать изменения в вашем коде и автоматически перезапустить сервер.

Теперь вы можете запустить сервер с помощью команды nodemon вместо node:

Хостинг node.js для небольших приложений

Node.js или Node — специальная серверная площадка для работы с языком JavaScript через движок V8. JavaScript действие выполняет на стороне клиента, ну а Node — уже на сервере.

Посредством Node можно писать нормальные приложения. Эта площадка умеет выполнять роль веб-сервера, легко работать с внешними библиотеками, а также вызывать команды из программного кода на JavaScript.

Хостинг node.js и его особенности

C Node вам будет намного проще масштабироваться. При подключении к серверу одновременно тысяч пользователей Node функционирует асинхронно. То есть, он ставит приоритеты и грамотнее распределяет все ресурсы. Java же, к примеру, на каждое подключение выделяет отдельный поток, что совсем неэкономно.

Откуда Node взялся

Когда и благодаря кому на свет появилась платформа Node? Это случилось благодаря Райану Далу в далеком 2009 году. До этого в серверах царил так называемый подход одного потока на каждое соединение.

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

Ключевая задача Node — построение сетевых масштабируемых серверов.

Преимущества Node

Среди ключевых преимуществ этой платформы стоит отметить следующие:

Простота

Хостинг node.js — это очень простой вариант для освоения, но для начала стоит разобраться в JavaScript, в особенности в его так называемых асинхронных концепциях.

Асинхронность

JavaScript функционирует в одном потоке, применяя функции и события обратного вызова для его разгрузки. Это отличное решение на сервере.

Почти все объекты в Node наследуют от класса EventEmitter, то есть они могут легко работать с различными событиями.

Множество библиотек и модулей

Развитие экосистемы Node обеспечивает пакетный менеджер npm. В настоящее время в нем свыше полумиллиона опенсорсных пакетов.

При этом ежедневно появляются новые. Вдобавок, у Node превосходная встроенная библиотека.

На базе низкоуровневой Node построены тысячи библиотек. Самые популярные:

  • Express – простой, но в то же время мощный фреймворк для веб-серверов со множеством различных опций.
  • Next.js – площадка для серверного рендеринга программ на React.
  • Micro – весьма легковесный проект для асинхронных микросервисов HTTP.
  • Meteor – fullstack-фреймворк, с помощью которого можно использовать код и на сервере, и на клиенте.
  • Koa – более профессиональный Express. Большой опыт разработчикам позволил сделать все намного компактнее и проще.
  • Socket.io – движок для разработки приложений, которые могут взаимодействовать в режиме онлайн.

Старый-добрый JavaScript

Тот же, который на фронтенде используют уже миллионы разработчиков. Теперь они могут с легкостью переходить на server-side, не изучая для этого совсем иной инструмент.

Разумеется, отличия есть. В первую очередь, в Node нет DOM, cookie и других веб-браузерных API. Но зато есть целый ряд собственных полезных способов и полноценный контроль над средой выполнения программного кода. Здесь вы сможете можно без страха применять наиболее современные возможности языка, вообще не озираясь на какие-то ограничения.

Также отличается механизм импорта. Веб-браузеры начинают внедрять модули ES6, а площадка Node применяет CommonJS с его require.

Движок V8

Это отличный опенсорсный проект на C++, который очень активно развивается и совершенствуется при помощи многих тысяч разработчиков.

Хотя JavaScript — это интерпретируемый язык программирования, на практике процесс его обработки достаточно сложен. Это давно уже взрослый язык, который способен работать в течение нескольких часов подряд, потому есть смысл делать готовый откомпилированный код.

Современные движки очень быстрые, так как сочетают в себе интерпретацию и JIT-компиляцию.

Хостинг node.js: как выложить NodeJS приложение или сайт

С приложениями и интернет-ресурсами, которые написаны на NodeJS сложнее, нежели с WordPress. Его так просто не закинуть на хостинг
node.js, как и привязать домен, и подключить необходимую базу данных. Здесь требуется сервер.

Арендовать целый сервер VPS для тестовых и редких задач не очень неразумно. Выкладывать на сервер компании тоже. Необходимо во всем разобраться.

После поиска в Гугле можно найти множество бесплатных сервисов, среди которых Amazon и Google Cloud Platform. Их тарифных планов вполне хватит для осуществления идеи. К тому же, по отзывам у Google наиболее приятная и простая панель управления.

Google App Engine

Наиболее нас интересует Google App Engine, а также немного Google Cloud Storage. Первый — это сам сервер Node, второй — хостинг для разнообразной статики (css, html, js файлов, однако, если репозиторий не приватный, то для этого можно применять и github pages).

Получение сервера

Пройдите регистрацию в Google Cloud Platform и создайте приложение. Укажите информацию для биллинга (снимать ничего не будет, можете не переживать, как только потребуется платить, вы получите специальное извещение и вам надо будет обязательно подтвердить платеж).

  • Откройте консоль для сервера Cloud Shell.
  • Залейте на сервер необходимый код, через git clone, либо любым другим комфортным способом.
  • Для первого приложения можете использовать Quickstart инструкцию от Google по этой ссылке — https://cloud.google.com/nodejs/getting-started/hello-world.


Деплой приложения

Когда приложение или сайт будет залит на сервер, запустите его посредством npm start, проверьте нормально ли все работает. Для того, чтобы опубликовать, необходимо выполнить следующее.

Откройте в консоли директорию с приложением и введите команду:

1
gcloud app deploy

Подождите пока закончится процесс и введите еще одну команду:
1
gcloud app browse

Вы получите URL, ссылку на ваш проект Node, которой можно поделиться.

Все готово. На всякий случай вы можете указать специальный лимит оплаты в день, чтобы не запустить случайно что-нибудь огромное и слить круглую сумму денег.

Зачем нужен Node.js – Подробное объяснение и курсы

Зачем нужен Node.js? Возрастающая популярность JavaScript повлекла за собой множество изменений, в том числе и в том, что собой представляет современная веб-разработка. Перед тем как углубиться в Node.js, вам, вероятно, будет интересно узнать о преимуществах использования JavaScript в стеке, в котором объединен язык и текстовый формат данных (JSON).

Так как это по большей части преимущество JavaScript в целом, а не Node.js, мы не будем на этом останавливаться. Тем не менее, это главный аргумент в пользу внедрения Node в ваш стек. Перед тем как мы перейдем к cамой статье, рекомендую вглянуть на один из самых лучших курсов по Node.js на сегодняшний день.

Из статьи в Википедии становится понятно, что Node.js это программный пакет, основанный на JavaScript-движке Google V8. Он включает уровень абстракции платформы – библиотеку libuv, и базовую библиотеку, которая сама главным образом написана на JavaScript. Кроме того, стоит отметить, что создатель Node.js Райан Даль намеревался создавать сайты, работающие в реальном времени с технологией push, вдохновившись такими приложениями, как Gmail. В Node.js он предоставил разработчикам инстумент для работы с парадигмой неблокирующего событийно-ориентированного ввода/вывода.

«Спустя больше 20 лет существования парадигмы «веб-приложения без запоминания состояния на базе соединения запрос-отклик без запоминания состояния», у нас наконец появились веб-приложения с двунаправленными соединениями в реальном времени.»

Зачем нужен Node.js

Если коротко, то Node.js блистательно себя показывает в веб-приложениях реального времени, используя технологию push в веб-сокетах. Что же здесь такого инновационного? Спустя более 20 лет существования парадигмы «веб-приложения без запоминания состояния на базе соединения запрос-отклик без запоминания состояния», у нас наконец появились веб-приложения с двунаправленными соединениями в реальном времени, в которых связь может быть инициирована клиентом или сервером, что позвляет им свободно обмениваться данными. Такой подход резко контрастирует с традиционной парадигмой веб-откликов, в которой связь всегда инициирует клиент. Кроме того, она основана на открытом веб-стеке (HTML, CSS и JS), работающем через стандартный порт 80.

Кто-то скажет: «Но ведь уже несколько лет по такому же принципу работают Flash- и Java-апплеты». В действительности они были реализованы на базе сред песочниц, в которых Веб использовался в качестве транспортного протокола для доставки клиенту. Вдобавок к этому, они работали изолированно и, чаще всего, через нестандартные порты, для которых были необходимы дополнительные права доступа и так далее.

Благодаря всем своим преимуществам Node.js играет важнейшую роль в технологическом стеке многих именитых компаний, которые широко используют его ключевые преимущества. Сообщество Node.js Foundation собрало основые доводы относительно того, почему компаниям стоит присмотреться к Node.js, и объединило их в небольшую презентацию, с которой можно ознакомиться здесь.

В этой статье я расскажу не только о том, как реализованы эти преимущества, но и о том, для чего стоит или не стоит использовать Node.js. И сделаю я это на примере некоторых классических моделей веб-приложений.

Зачем нужен Node.js — Как это работает?

Основная идея Node.js заключается в использовании неблокирующего событийно-ориентированного ввода/вывода, чтобы оставаться легковесным и эффективным при работе с приложениями, обрабатывающими большие объемы данных в реальном времени и работающими на распределенных устойствах. Звучит довольно сложно, да?

«На самом деле это значит, что Node.js НЕ является универсальной платформой для любых задач, которая станет передовой на рынке веб-разработки. Совсем наоборот – это платформа для конкретных целей.»

На самом деле это значит, что Node.js НЕ является универсальной платформой для любых задач, которая станет передовой на рынке веб-разработки. Совсем наоборот – это платформа для конкретных целей. И это очень важно понимать. Node.js определенно не стоит использовать для операций с интенсивной вычислительной нагрузкой на центральный процессор. Такого рода применение сведет на нет все его преимущества. Зато Node отлично себя покажет при построении быстрых масштабируемых сетевых приложений, поскольку он может одновременно обрабатывать большое количество соединений с большой пропускной способностью, что равноценно высокой масштабируемости.

То, как это работает изнутри, заслуживает особого внимания. В отличие от традиционных веб-сервисов, в которых каждое соединение (запрос) создает новый поток, используя при этом системную оперативную память и в конечном счете выжимая максимум из всего доступного объема памяти, Node.js работет на базе одного потока и использует при вызовах неблокирующий ввод/вывод, что позволяет ему поддерживать десятки тысяч одновременных соединений (хранящихся в цикле событий).

Зачем нужен Node.js

Вот, навскидку простой пример: представьте, что каждый поток может затребовать 2 Мб памяти, а объем оперативной памяти всей системы составляет 8 Гб. Теоретически максимальное количество одновременных соединений составляет 4000 (данные расчета взяты из статьи Майкла Абернети «Что именно собой представляет Node.js?», опубликованной на ресурсе IBM для разработчиков «IBM developerWorks» в 2011 году; к сожалению, статьи больше нет в свободном доступе), плюс затраты на переключение контекста между потоками. Обычно с таким сценарием приходится сталкиваться при использовании традиционных веб-сервисов. Node.js позволяет избежать всего этого и добиться уровня масштабируемости свыше миллиона одновременных соединений и свыше 600 тысяч одновременных соединений веб-сокетов.

Илон Маск рекомендует:  Что такое код asp asplogerrorrequests

Конечно, открытым остается вопрос распределения единственного потока между всеми клиентскими запросами, и это является одним из подводных камней при создании приложений на Node.js. Во-первых, сложные вычисления могут забить единственный поток Node, что, в свою очередь, создаст всем клиентам определенные проблемы (об этом чуть позже), поскольку входящие запросы будут заблокированы до тех пор, пока эти вычисления не будут завершены. Во-вторых, разработчикам нужно быть очень осторожными, чтобы не допустить появления исключений до базового (самого верхнего) цикла событий Node.js – это может привести к прекращению работы копии Node.js (фактически, к завершению работы всей программы).

Для избежания исключений до самой поверхности используем прием, который заключается в обратной передаче ошибок вызывающей стороне в виде параметров обратного вызова (без выбрасываний, что характерно для других сред). Даже если какие-то необработанные исключения все-таки всплывают, для отслеживания процесса Node.js и выполнения необходимого восстановления копии, которая аварийно завершилась (хотя восстановить пользовательский сеанс вряд ли удастся), были разработаны специальные инструменты. Самый распространенный из них это модуль Forever; также можно использовать внешние системные инструменты Upstart и Monit.

NPM: Менеджер пакетов Node

При разговоре о Node.js очень важно не упустить одну важную деталь. Это встроенная поддержка управления пакетами с помощью инструмента NPM, который по умолчанию идет в любой установке Node.js. Принцип модулей NPM схож с принципом Ruby Gems – это набор повторно используемых компонентов, находящихся в открытом доступе. Их можно легко установить из сетевого репозитория, с поддержкой управления версиями и зависимостями.

С полным списком пакетных модулей можно ознакомиться на сайте npm; он также доступен в CLI-инструменте npm, который автоматически устанавливается вместе с Node.js. Экосистема модулей открыта для всех, то есть любой желающий может опубликовать свой собственный модуль, который впоследствии будет размещаться в репозиторие npm. С кратким введением в npm можно ознакомиться в Руководстве для начинающих, а подробнее о том, как размещать модули здесь (информация на английском языке).

Предлагаем вашему вниманию список самых полезных модулей npm:

  • express (он жеjs) – это фреймворк для веб-разработки для Node.js в духе Sinatra; фактически стандартный для большинства существующих приложений Node.js.
  • hapi– очень модульный и простой в работе фреймворк, ориентированный на кофигурацию, для создания веб- и сервисных приложений
  • connect– это HTTP-серверный фреймворк для js с возможностью расширения, который предоставляет коллекцию высокопроизводительных плагинов, известных под названием «межплатформенное ПО»; служит основой для Express.
  • socket.ioи sockjs – серверная часть двух самых популярных на сегодняшний день веб-сокетных компонентов.
  • pug(ранее Jade) – один из известных шаблонных движков в духе HAML; используется по умолчанию в js.
  • mongodbи mongojs – обертки MongoDB, которые предоставляют ИПП для объектных баз данных MongoDB в Node.js.
  • redis– клиентская библиотека.
  • lodash (underscore, lazy.js)– своеобразный «пояс с инструментами» JavaScript. Первопроходцем была Underscore, но ее обошли две аналогичные библиотеки, в основном за счет более высокой производительности и модульной реализации.
  • forever– чуть ли не самая распространенная утилита, которая обеспечивает непрерывное выполнение сценария на конкретном узле. Позволяет вашему процессу js работать бесперебойно при любых непредвиденных сбоях.
  • bluebird– полнофункциональная реализация промисов/A+ с невероятно высокой производительностью.
  • moment– легкая JavaScript-библиотека для анализа, подтверждения, обработки и форматирования дат.

Список можно продолжать очень долго. Существует еще очень много полезных пакетов, доступных каждому.

Зачем нужен Node.js — примеры использования

Чат это самое типичное многопользовательское приложение, работающее в режиме реального времени. Если раньше были ретрансплируемые интернет-чаты на базе технологии IRC (были и такие времена), использующие различные частные и открытые протоколы, работающие через нестандартные порты, то сегодня можно реализовать все на Node.js с помощью веб-сокетов, работающих через стандартный порт 80.

Чат это действительно отличный пример приложения на Node.js: это легковесное приложение с высоким трафиком, интенсивно обрабатывающее большие объемы данных (с низким потреблением вычислительных мощностей) и работающее на распределенных устройствах. Он также хорошо подходит для обучения, поскольку довольно простой, и в то же время охватывает большинство парадигм, которые вам когда-либо понадобятся в типичном приложении Node.js.

Давайте разберемся, как он работает на простом примере. Представим, что у нас на сайте есть одна комната чата, куда люди заходят и могут обмениваться сообщенияи со всеми пользователями. И, к примеру, на сайте находится три человека, которые могут писать сообщения на нашем форуме.

На стороне сервера у нас работает простое приложение Express.js, в котором реализуются две функции: 1) обработчик запросов GET ‘/’, который обслуживает веб-страницу, на которой находится форум с сообщениями и кнопка «Отправить», которая инициирует ввод нового сообщения; 2) сервер веб-сокетов, который отслеживает поступление новых сообщений, выдаваемых клиентами веб-сокетов.

На стороне клиента у нас находится HTML-страница с двумя настроенными обработчиками; один отслеживает события нажатия кнопки «Отправить», которая «подхватывает» введенное сообщение и отправляет его вниз на веб-сокет, а второй отслеживает новые входящие сообщения, поступающие клиенту веб-сокетов (то есть, сообщения, отправленные другими пользователями, которые сервер хочет отобразить с помощью этого клиента).

Зачем нужен Node.js

Как только один из клиентов отправляет сообщение, происходит следующее:

  1. Браузер «подхватывает» нажатие кнопки «Отправить» с помощью обработчика JavaScript, забирает значение из поля ввода (то есть, текст сообщения) и выдает сообщение веб-сокета с помощью клиента веб-сокетов, подключенного к нашему серверу (он инициализируется одновременно с веб-страницей).
  2. Серверный компонент веб-сокетного соединения получает сообщение и перенаправляет его на все остальные подключенные клиенты путем широковещательней передачи.
  3. Все клиенты получают новое push-сообщение с помощью веб-сокетного клиентского компонента, который работает на веб-странице. После этого они «подхватывают» содержание сообщения и локально обновляют веб-страницу, добавляя новое сообщение на форум.

Это был самый простой пример. Чтобы создать более надежное решение, можно использовать простой кэш на базе хранилища Redis. Можно пойти дальше и создать еще более продвинутое решение. Это очередь сообщений для обработки маршрутизации сообщений к клиентам и более надежный механизм доставки. Он может компенсировать временные потери соединения или хранить сообщения для зарегистрированных клиентов, пока они находятся в режиме офлайн. Независимо от того, какие улучшения вы захотите реализовать, Node.js будет по-прежнему работать согласно тем же базовым принципам: реагирование на события, обработка большого количества одновременных соединений и обеспечение плавного взаимодействия с пользователем.

ИПП ПОВЕРХ ОБЪЕКТНО-ОРИЕНТИРОВАННОЙ БАЗЫ ДАННЫХ

Хотя Node.js отлично показывает себя в приложениях, работающих в режиме реального времени, он также хорошо подходит для выдачи данных из объектных баз данных (например, из MongoDB). Данные в формате JSON позволяют Node.js работать без рассогласования интерфейсов и преобразования данных.

К примеру, если вы используете Rails, вам необходимо преобразовывать JSON в бинарные модели, а затем выдавать их обратно в виде JSON по HTTP, когда данные используются Backbone.js, Angular.js и т.п., и даже обычными вызовами jQuery AJAX. С помощью Node.js вы можете просто выдавать свои объекты JSON клиенту для использования с помощью ИПП REST. Вам также не нужно беспокоиться о преобразовании между JSON и чем-то другим при считывании или записи в свою базу данных (если вы используете MongoDB). В целом, вы сможете устранить множественные преобразования, используя стандартный формат сериализации данных на клиенте, сервере и в базе данных.


ОЧЕРЕДИ ВВОДА

Если вы одновременно получаете большие объемы данных, ваша база данных может стать узким местом. Как уже было описано выше, Node.js может легко обрабатывать одновременные соединения. Но поскольку обращение к базе данных в данном случае блокирующая операция, у нас появляются проблемы. Решением будет записать поведение клиента до того, как данные будут на самом деле записаны в базу.

При таком подходе система будет сохранять свою отзывчивость при высокой нагрузке, что в особености полезно, когда клиенту не нужно четкое подтверждение успешной записи данных. Типичные примеры: регистрация или запись данных об активности пользователей, которые обрабатываются пакетами и не используются до определенного времени; операции, которые не требуют мгновенного отображения (например, счетчик лайков на Facebook), и в которых допустима согласованность в конечном счете (которая часто используется в NoSQL).

Данные выстраиваются в очередь с помощью специальной инфраструктуры кэширования или организации очередей сообщений (например RabbitMQ, ZeroMQ) и обрабатываются в рамках процесса записи отдельных пакетов в базу данных или с помощью серверных служб по обработке, расчитанных на интенсивные вычисления и записанных для таких целей на более производительной платформе. Похожее поведение можно реализовать и с помощью других языков/фреймвороков, но на другом аппаратном оборудовании с другой высокой стабильной пропускной способностью.

Если коротко, то с помощью Node можно откладывать операции записи в базу данных и обработать их позже, продолжая работу таким образом, как будто они были выполнены.

ПОТОКОВАЯ ПЕРЕДАЧА ДАННЫХ

На более традиционных веб-платформах HTTP-запросы и отклики воспринимаются как отдельные события; на самом деле они представляют собой потоки. Это можно использовать в Node.js для создания очень полезных возможностей. Например, можно обрабатывать файлы, пока они еще загружаются. Поскольку данные поступают в виде потока, мы можем обрабатывать их в режиме онлайн. Это можно применить, к примеру, для кодирования аудио- и видеоинформации в режиме реального времени. И для установки прокси-сервера между различными источниками данных (об этом подробнее в следующем разделе).

ПРОКСИ-СЕРВЕР

Node.js можно легко использовать в качестве прокси-сервера, в котором он сможет обрабатывать большое количество одновременных соединений в режиме неблокирования. Это особенно удобно при проксировании различных сервисов с различным временем отклика, а также при сборе данных из большого количества источников.

Давайте рассмотрим такой пример. Существует серверное приложение, которое связывается со сторонними ресурсами. Оно принимает данные с различных источников или хранит такие ресурсы, как изображения и видео, и передает их на сторонние облачные сервисы.

Несмотря на то, что выделенные прокси-серверы существуют, использование вместо них Node может быть удобным. Удобным тогда, когда у вас нет прокси-инфраструктуры или если вам нужно решение для локальной разработки. Под этим я понимаю то, что вы сможете создать клиентское приложение с сервером разработки Node.js для хранения ресурсов и добавления прокси/заглушек для запросов к ИПП, в то время как в реальных условиях такие взаимодействия выполнялись бы с помощью выделенного прокси-сервера (nginx, HAProxy и т.п.).

БРОКЕРИДЖ – ИНФОРМАЦИОННАЯ ПАНЕЛЬ БИРЖЕВОГО МАКЛЕРА

Давайте вернемся на уровень приложений. Еще одним примером, в котором преобладают программы для ПК, но их можно легко заменить на веб-решения, работающие в реальном времени, это ПО для брокерского трейдинга, которое отслеживает котировки акций, выполняет вычисления и технический анализ, а также выводит графики и диаграммы.

Переход на веб-решения, работающие в реальном времени, позволит брокерам легко переключаться между рабочими станциями или рабочими местами. Вполне возможно, что в скором времени мы начнем замечать их на пляжах Флориды, Ибицы и Бали.

ПАНЕЛЬ МОНИТОРИНГА ПРИЛОЖЕНИЙ

Еще одним типичным вариантом использования, для которого отлично подходит модель Node с веб-сокетами, является слежение за посетителями сайта и отображение их взаимодействия в реальном времени.

Можно собирать статистику о пользователях в реальном времени; можно пойти еще дальше и добавить целевые воздействия со своими посетителями, открывая канал связи при достижении ими определенной точки в вашей воронке (если вас это заинтересовало, эта идея уже реализована с помощью CANDDi).

Только представьте, как вы могли бы улучшить свой бизнес, если бы знали, что делают ваши пользователи в реальном времени, если бы можно было визуализировать их взаимодействия. Теперь у вас будет такая возможность с помощью двунаправленных сокетов Node.js, работающих в реальном времени.

ПАНЕЛЬ КОНТРОЛЯ СИСТЕМЫ

Давайте теперь поговорим об инфраструктуре. Представьте, что есть SaaS-провайдер, который хочет предложить своим клиентам страницу для отслеживания сервисов (такую как статусную страницу GitHub, например). Используя цикл событий Node.js мы можем создать мощную веб-панель, которая асинхронно отслеживает статус сервисов и отправляет данные клиентам через веб-сокеты.

С помощью этой технологии можно в реальном времени передавать информацию о статусе как внутренних (корпоративных), так и общедоступных сервисов. Если развить эту идею дальше, можно довольно легко представить сетевой операционный центр, который осуществляет контроль работы приложений оператора связи, поставщика облачных сервисов, сетевых услуг и хостинга, а также финансового учреждения. Все это работает в открытом веб-стеке на базе Node.js и веб-сокетов вместо Java и/или Java-апплетов.

Примечание: Не пытайтесь создавать на базе Node системы жесткого реального времени Node (то есть системы, требующие точного времени отклика). Для такого рода приложений лучше всего использовать Erlang.

Зачем нужен Node.js — где можно использовать

Зачем нужен Node.js — СЕРВЕРНЫЕ ВЕБ-ПРИЛОЖЕНИЯ

Node.js с Express.js можно также использовать для создания классических серверных веб-приложений. И хоть это и возможно, эта парадигма запрос-отклик, в которой Node.js будет переносить отображенный HTML, не является типичным вариантом использования. Есть аргументы за и против этого подхода. Вот некоторые из них:

Преимущества:

  • Если ваше приложение не выполняет вычислений с интенсивной нагрузкой на центральный процессор, его можно полностью создать на Javascript. В том числе и базу данных, если вы используете объектную базу данных JSON, например MongoDB. Это существенно упрощает процесс разработки (в том числе подбор специалистов).
  • Поисковые модули получают в ответ полностью отображенный HTML. Он гораздо более дружественный к SEO, чем, скажем, одностраничное приложение или веб-сокетное приложение, работающее на базе js.

Недостатки:

  • Любые вычисления с интенсивной нагрузкой на центральный процесор будут блокировать отзывчивость js, поэтому лучше в таком случае использовать мнгопоточную платформу. Можно также попробовать горизонтальное масштабирование вычислений*.
  • Использование js с реляционной базой данных несет в себе много сложностей (об этом подробнее ниже). Для реляционных операций лучше всего выбрать какую-нибудь другую среду, к примеру Rails, Django или ASP.Net MVC.

* Как вариант, для таких вычислений с интенсивной нагрузкой на центральный процессор можно создать высокомасштабируемую среду на базе MQ с обработкой на стороне сервера, чтобы Node оставался спереди и асинхронно обрабатывал клиентские запросы.

Зачем нужен Node.js — где не стоит использовать

Зачем нужен Node.js — СЕРВЕРНОЕ ВЕБ-ПРИЛОЖЕНИЕ С РЕЛЯЦИОННОЙ БАЗОЙ ДАННЫХ

Если сравнивать Node.js и Express.js с Ruby on Rails с точки зрения доступа к реляционным данным, выбор будет явно в пользу последнего.

Инструменты реляционных баз данных для Node.js по-прежнему находятся на этапе доработок, поэтому работать с ними пока не очень удобно. Rails же осуществляет автоматическую настройку доступа доступа к данным «прямо из коробки». Он также предоставляет инструменты для поддержки миграций схем баз данных и другие «плюшки». Rails и соответствующие фреймворки имеют серьезные и проверенные реализации доступа к уровню данных (Active Record или Data Mapper), которых вам будет очень не хватать, если вы решите воссоздать их на чистом JavaScript.*

Но если вы действительно склоняетесь к тому, чтобы все делать исключительно на JavaScript (и готовы немного помучиться), будьте внимательны при работе с Sequelize и Node ORM2 – они пока находятся не в самом идеальном виде, но в скором времени это изменится.

* Можно использовать Node (что довольно часто практикуется) исключительно на стороне клиента, а back-end при этом реализовать на Rails, что позволит обеспечить простой доступ к реляционной базе данных.

Зачем нужен Node.js — СЛОЖНЫЕ СЕРВЕРНЫЕ ВЫЧИСЛЕНИЯ И ОБРАБОТКА

Если говорить о сложных вычислениях, Node.js не самая лучшая платформа. Вам определенно не стоит создавать на Node.js сервер вычислений Фибоначчи. В общем, любые операции с интенсивной вычислительной нагрузкой на центральный процессор сводят на нет все преимущества пропускной способности, которые предоставляет Node в рамках модели неблокирующего событийно-ориентированного ввода/вывода, поскольку любые входящие запросы будут блокироваться, пока поток занят обработкой данных.

Как было указано выше, Node.js однопоточный и использует всего лишь одно ядро процессора. Когда необходимо реализовать параллельную работу на многоядерном сервере, группа разработчиков ядра Node должна заняться подготовкой кластерного модуля. Можно также легко запустить несколько экземпляров сервера Node.js за обратным прокси-сервером через nginx.

С помощью кластеризации вы все равно сможете выгрузить все сложные вычисления в фоновые процессы, работающие в более приемлемой для этого среде, и обеспечить между ними соединение через сервер очереди сообщений, такой как RabbitMQ.

Несмотря на то, что изначально ваша фоновая обработка данных могла осуществляться на том же сервере. Такой подход позволяет добиться очень высокой масштабируемости. Такие службы фоновой обработки можно легко распределить на отдельные рабочие серверы без необходимости в настройке нагрузки фронтальных веб-серверов.

Конечно, такой же подход можно применить и на других платформах, но с Node.js вы сможете получить ту самую пропускную способность (количество запросов в секунду), о который мы говорили ранее, поскольку каждый запрос это маленькая задача, выполняемая очень быстро и эффективно.

Зачем нужен Node.js — Вывод

Мы рассказали все о Node.js с теоретической и практической точек зрения. Вы узнали о целях и назначениях, а также о различных «плюшках» и подводных камнях. Когда у людей возникают проблемы при работе с Node, чаще всего они сводятся к тому, что корнем зла являются блокирующие операции. В 99% случаев причина всех проблем заключается в неправильном использовании Node.

«При работе с Node корнем зла являются блокирующие операции. В 99% случаев причина всех проблем заключается в неправильном использовании Node.»

Помните о том, что Node.js не был создан для решения проблем, связанных с масштабированием вычислений. Он был создан для решения проблем масштабирования ввода/вывода, с которой он отлично справляется.

Так, зачем нужен Node.js? Если ваш вариант использования не предполагает операций с интенсивной вычислительной нагрузкой на центральный процессор или обращения к блокируемым ресурсам, вы можете смело использовать преимущества Node.js. И наслаждайтесь быстрыми и масштабируемыми сетевыми приложениями!

Добро пожаловать в веб-приложения, работающие в реальном времени!

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL