О Node.js®
Как асинхронное событийное JavaScript-окружение, Node.js спроектирован для построения масштабируемых сетевых приложений. Ниже приведен пример «hello world», который может одновременно обрабатывать много соединений. Для каждого соединения вызывается функция обратного вызова, однако, когда соединений нет Node.js засыпает.
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); >); server.listen(port, hostname, () => console.log(`Server running at http://$hostname>:$port>/`); >);
Этот подход контрастирует с более распространенной на сегодняшний день моделью параллелизма, в которой используются параллельные OS потоки. Такой подход является относительно неэффективным и очень сложным в использовании. Кроме того, пользователи Node.js могут не беспокоиться о блокировках процессов, поскольку их не существует. Почти ни одна из функций в Node.js не работает напрямую с I/O, поэтому поток никогда не блокируется. В следствии этого на Node.js легко разрабатывать масштабируемые системы.
Для более детального знакомства с этим подходом, можно ознакомится с полной статьей Blocking vs Non-Blocking.
Node.js создан под влиянием таких систем как Event Machine в Ruby или Twisted в Python. Но при этом событийная модель, в нем, используется значительно шире, принимая event loop за основу окружения, а не в качестве отдельной библиотеки. В других системах всегда происходят блокировки вызова, чтобы запустить цикл событий.
Обычно, поведение определяется через функции обратного вызова (callback) в начале скрипта и дальнейшим его вызовом через блокирующий вызов, вроде EventMachine::run() . В Node.js нет ничего похожего на вызов начала цикла событий, он автоматически входит в него после запуска скрипта. Node.js выходит из событийного цикла тогда, когда не остается зарегистрированных функций обратного вызова. Такое поведение похоже на поведение браузерного JavaScript, где событийный цикл скрыт от пользователя.
HTTP является объектом первого рода в Node.js, разработанным с поточностью и малой задержкой, что делает Node.js хорошей основой для веб-библиотеки или фреймворка.
То что Node.js спроектирован без многопоточности, не означает, что в нем нет возможности использовать нескольких ядер. Для работы с ними можно создавать и управлять дочерними процессами, с помощью API Child_process.fork() . Модуль cluster построен на этом интерфейсе и позволяет делиться сокетами между процессами и распределять нагрузку между ядрами.
Copyright OpenJS Foundation and Node.js contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation, please see our Trademark Policy and Trademark List. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
Что такое Node JS. Начало работы¶
Node.js представляет среду выполнения кода на JavaScript, которая построена на основе движка JavaScript Chrome V8, который позволяет транслировать вызовы на языке JavaScript в машинный код. Node.js прежде всего предназначен для создания серверных приложений на языке JavaScript. Хотя также существуют проекты по написанию десктопных приложений (Electron) и даже по созданию кода для микроконтроллеров. Но прежде всего мы говорим о Node.js, как о платформе для создания веб-приложений.
Node.js является открытым проектом, исходники которого можно посмотреть на github.com.
Установка¶
Для загрузки перейдет на официальный сайт https://nodejs.org/en/. На главной странице мы сразу увидим две возможные опции для загрузки: самая последняя версия NodeJS и LTS-версия.
Загрузим последнюю версию. В моем случае это версия 11.1.0. Для Windows установщик представляет файл с расширением msi . После запуска откроется программа установщика:
После успешной установки вы можем ввести в командной строке/терминале команду node -v , и нам отобразится текущая версия node.js:
C:\WINDOWS\system32>node -v v11.1.0
Версии node.js для других операционных систем наряду с исходниками можно найти по адресу https://nodejs.org/en/download/
Инструменты разработки¶
Для разработки под Node JS достаточно простейшего текстового редактора, в частности, Notepad++. Также можно использовать более продвинутые редакторы типа Atom, Sublime, Visual Studio Code, либо среды разработки, которые поддерживают работу с Node.JS, например, Visual Studio или WebStorm.
REPL¶
После установки NodeJS нам становится доступным такой инструмент как REPL. REPL (Read Eval Print Loop) представляет возможность запуска выражений на языке JavaScript в командной строке или терминале.
Так, запустим командную строку (на Windows) или терминал (на OS X или Linux) и введем команду node . После ввода этой команды мы можем выполнять различные выражения на JavaScript:
1 2 3 4
C:\WINDOWS\system32>node > 2+6 8 >
Или используем какую-нибудь функцию JS:
1 2 3 4
> console.log("Hello NodeJS"); Hello NodeJS undefined >
Можно определять свои функции и затем их вызывать, например, возведение числа в квадрат:
1 2 3 4 5
> function sqrt(x) undefined >sqrt(5) 25 >
Если мы введем что-то неправильно, то REPL укажет об ошибке:
Выполнение файла¶
Вместо того чтобы вводить весь код напрямую в консоль, удобнее вынести его во внешний файл. Например, создадим на жестком диске новый каталог, допустим, C:\node\helloapp , в который поместим новый файл app.js со следующим кодом:
console.log('Hello world');
В командной строке перейдем с помощью команды cd к каталогу helloapp , а затем выполним команду:
node app.js
Данная команда выполнит код из файла app.js :
При подготовке материала использовались источники:
https://nodejs.org/ru/about
https://nodejsdev.ru/guides/metanit/