УДК 004.43
Халилова
Зарема Энверовна
ПЛАТФОРМА NODE.JS
КАК СРЕДСТВО ДЛЯ СОЗДАНИЯ
ВЕБ-СЕРВЕРА
Аннотация: В статье
приводятся особенности Node.js как
программной платформы для написания кода на стороне сервера. Раскрывается
сущность понятия асинхронности выполнения программного кода. Представлен
простейший пример веб-сервера с использованием популярного феймворка Express.
Ключевые слова:
программная платформа Node.js, язык JavaScript, веб-разработка, front-end, back-end, веб-сервер.
Постановка проблемы. На сегодняшний день одним из наиболее
развивающихся направлений в программировании считается веб-разработка. Причем
это направление актуально как среди начинающих, так и опытных специалистов. На
современном этапе в мире спрос на веб-разработчиков будет только расти.
Фундаментально веб-разработку можно разделить на две части: фронтенд (от англ. front-end) и бекенд (от англ. back-end).
Если реализация фронтенда традиционно осуществляется средствами HTML/CSS/JavaScript,
то для бекенд разработчиков открывается широкий спектр различных технологий,
среди которых можно выделить PHP, Java, Python, Node.js и др. Некоторые из приведенных языков
программирования имеют свой порог вхождения и позволяют писать программы как
для клиентской, так и серверной части. Следует отметить современную программную
платформу Node.js, которая зарекомендовала себя на достаточно
высоком уровне. С помощью данной программной платформы достаточно просто
реализовать свой веб-сервер, при этом владея лишь знаниями по языку JavaScript
и технологией веб-разработки. Кроме того, фронтенд разработчики, владеющие
языком программирования JavaScript, могут без особых затруднений перейти на
платформу Node.js, то есть освоить технологию создания
серверной части приложения и стать так называемыми Full Stack
разработчиками. Именно поэтому Node.js развивается и будет развиваться как
программная платформа для написания кода на стороне сервера.
Анализ последних исследований
и публикаций. В связи со
стремительным развитием веб-разработки, а также программной платформы Node.js как
средства запуска JavaScript кода на стороне сервера, данной проблеме
посвящено достаточное количество исследований и публикаций. В частности, в
статье Чертихина А.А. и Субботиной Т.А. [1] рассматриваются
проблемы использования стандартных способов и методов управления в
стремительной развивающейся области веб-разработки и модернизации существующих
методов управления с широким использованием веб-приложений. А в работе
Матысик О.В. и Саливончик Н.Л. [2] представляется процесс
разработки клиент-серверного приложения для поиска оптимального маршрута
передвижения на общественном транспорте. Данное приложение разработано
средствами платформы Node.js, базы данных MySQL, библиотеки JQuery и
технологий AJAX. В научной статье Гурина Н.И. и
Крыловой Т.А. [3] рассматривается анализ и апробация преимуществ
платформы Node.js, базирующейся на событийно-ориентированной
модели взаимодействия приложения с сервером с выводом языка JavaScript
за пределы браузера.
Цель
статьи – провести анализ возможностей Node.js как программной платформы для написания кода на стороне
сервера, а также практически реализовать собственный веб-сервер на базе
исследуемой платформы.
Изложение основного
материала. Прежде чем
приступить к созданию веб-сервера рассмотрим, что же из себя представляет Node.js. Node или
Node.js [4] – программная платформа, основанная на
движке V8 (который в свою очередь транслирует JavaScript в машинный код), превращающая JavaScript
из узкоспециализированного языка в язык общего назначения. Для того, чтобы
понять суть данного определения для начала необходимо углубиться в то, как
работает JavaScript внутри, а именно рассмотреть цикл событий и
асинхронность. JavaScript является однопоточным асинхронным
параллельным неблокирующим языком программирования. Однако данное определение
являются достаточно запутанным, именно поэтому рассмотрим схему, представленную
ниже. На данной схеме изображен движок V8, но кроме этого Web APIs (DOM, AJAX, Timeout – потоки, к которым нет прямого доступа,
можно лишь выполнять обращения к ним), а также цикл событий и очередь задач.

Рис. 1. Схема
работы движка JS
Поскольку JavaScript
это однопоточная среда выполнения, значит, что стек вызовов у него один, то
есть может выполняться только одна операция в единицу времени. Однако следуя
определению, представленному выше, JavaScript является в то же время и асинхронным языком
программирования. И это асинхронность выполняется посредством Web APIs,
т.е. инструментов, предоставляемых самим браузером. Для наглядности рассмотрим
работу данного фрагмента кода (листинг 1) в браузере.
Листинг 1. Тестовый
фрагмент кода
console.log(“Hello”);
setTimeout
(function cb()) {
console.log(“Node.js”);
}, 5000);
console.log(“This is”);
В первую очередь при выполнении
этого программного кода в стек вызовов (от англ. Call Stack)
попадет функция console.log(…), которая выведет сообщение “Hello.” в консоли. После выполнения функции она удаляется из
стека вызовов. На следующем шаге выполняется функция setTimeout(…), которой передается коллбэк-функция cb(), что позволяет избежать блокирования, с задержкой
5 секунд. Однако стек вызовов не ожидает пока выполнится данная функция, а
отправляет ее в Web APIs, где запускается таймер. Фактически это
означает, что таймер запущен параллельно (асинхронно), и можно очистить стек
вызовов для следующей функции. Далее вызывается функция console.log(), которая выводит сообщение “This is” и стек вызовов очищается. Однако тем временем, когда
в Web
APIs таймер, установленный на 5 секунд, завершает
свою работу, запланированная коллбэк-функция помещается в очередь задач (от
англ. Task Queue). Далее цикл событий (от англ. Event Loop)
проверяет отсутствие задач в стеке вызовов и в случае положительного ответа
отправляет первую задачу, находящуюся в очереди задач, в стек вызовов. В итоге
коллбэк-функция cb() выполняется в текущий момент времени и в
консоль выводится сообщение “Node.js”.
Данный пример демонстрирует, что
в самом движке V8 код выполняется однопоточно, однако потоки Web APIs,
поставляемые браузером, позволяют асинхронно выполнять некоторые операции.
При разработке веб-сервера на Node.js
многие операции приходится выполнять асинхронно с целью ухода от блокирования и
повышения скорости выполнения программ. Именно поэтому важно понимать, как
работают асинхронные коллбэки и, в частности, сам JavaScript
изнутри. Для реализации веб-сервера воспользуемся фреймворком Express,
который является достаточно гибким и быстрым при написании приложений с
использованием платформы Node.js.
В первую очередь необходимо
создать каталог для будущего приложения, и установить его в качестве рабочего,
например, на локальном диске D:
D:\nodeProjects>mkdir
nodeWebServer
D:\nodeProjects>cd
nodeWebServer
D:\nodeProjects\nodeWebServer>
Далее с помощью команды npm init создается файл package.json. Данный файл
содержит название проекта, версию, а также необходимые зависимости, включенные
в проект.
D:\nodeProjects\nodeWebServer>npm init
Теперь необходимо установить Express
в проект. Для этого воспользуемся командой npm install express --save. Атрибут
--save позволяет сохранить Express в списке
зависимостей.
D:\nodeProjects\nodeWebServer>npm install express --save
npm notice created a lockfile as package-lock.json. You
should commit this file.
npm WARN nodewebserver@1.0.0 No description
npm WARN nodewebserver@1.0.0 No repository field.
+ express@4.16.2
added 49 packages in 13.439s
Затем в рабочем каталоге
создадим файл index.js и добавим в него следующий код (рис. 2):

Рис. 2.
Файл index.js
В данном примере:
1. Импортируем
модуль express.
2. Запускаем
приложение.
3. Создаем
переменную, в которой будет храниться номер порта.
4. Выдаем ответ
“Hello, World” на запрос, адресованный корневому маршруту(“/”).
5. Прослушиваем
соединение на порту 3000 и в случае выполнения соединения в консоли выводится
сообщение об успешном соединении. В противном случае выводится сообщение об
ошибке.
Далее следует запустить
приложение с помощью команды node
index.js и перейти по адресу http://localhost:3000/ для просмотра результата выполнения
программы.
D:\nodeProjects\nodeWebServer>node
index.js
Connection
successfully on port 3000
Выводы. В
результате разработки простейшего веб-сервера на базе программной платформы Node.js можно
сделать вывод, что данная платформа является действительно достаточно простой в
изучении, однако мощным средством для написания серверной части приложения.
Кроме того, платформа Node.js решает основные задачи, поставленные при
веб-разработке, такие как работа с базами данных, низкоуровневый доступ к сети
и др.
Список литературы
1. Чертихин А.А.,
Субботина Т.А. Применение стандартных методов и технологий управления
проектами в среде веб-разработки // Вестник МГУП, 2015. – №1. – [Электронный ресурс]. URL:
http://cyberleninka.ru/article/n/primenenie-standartnyh-metodov-i-tehnologiy-upravleniya-proektami-v-srede-veb-razrabotki
(дата обращения: 23.01.2018).
2. Матысик О.В.,
Саливончик Н.Л. Клиент-серверное приложение для поиска оптимального
маршрута и визуализации движения общественного транспорта // Символ науки,
2016. – №3-3. – [Электронный
ресурс]. URL:
http://cyberleninka.ru/article/n/klient-servernoe-prilozhenie-dlya-poiska-optimalnogo-marshruta-i-vizualizatsii-dvizheniya-obschestvennogo-transporta
(дата обращения: 23.01.2018).
3. Гурин Н.И., Крылова Т.А.
Интернет-приложение на платформе Node для электронной биржи перевозок // Труды
БГТУ. Серия 3: Физико-математические науки и информатика, 2016. –
№6 (188). [Электронный ресурс].
URL:
http://cyberleninka.ru/article/n/internet-prilozhenie-na-platforme-node-dlya-elektronnoy-birzhi-perevozok
(дата обращения: 23.01.2018).
4. Свободная энциклопедия Википедия. – [Электронный ресурс]. URL: https://ru.wikipedia.org/wiki/Node.js (дата
обращения: 23.01.2018).
Халилова
Зарема Энверовна, студентка 3-го
года обучения группы И-2-15, ГБОУВО РК «Крымский инженерно-педагогический
университет»
пер.
Учебный, 8, г. Симферополь, Республика Крым, 295015
E-mail: halilova.z.i15@gmail.com
Z.E. Khalilovа
PLATFORM NODE.JS AS A MEANS FOR CREATION
WEB SERVERS
Abstract:
The article describes the features
of Node.js as a software platform for writing server-side code. The essence of
the concept of asynchronous execution of the program code is revealed. A simple
example of a web server using the popular Express framework is presented.
Key words: Node.js software platform, JavaScript language, web
development, front-end, back-end, web server.
References
1. Chertikhin A.A.,
Subbotina T.A. Primenenie standartnykh metodov i tekhnologii
upravleniya proektami v srede veb-razrabotki // Vestnik MGUP, 2015. – №1. –
[Elektronnyi resurs]. URL:
http://cyberleninka.ru/article/n/primenenie-standartnyh-metodov-i-tehnologiy-upravleniya-proektami-v-srede-veb-razrabotki
(data obrashcheniya: 23.01.2018).
2. Matysik O.V.,
Salivonchik N.L. Klient-servernoe prilozhenie dlya poiska optimal'nogo
marshruta i vizualizatsii dvizheniya obshchestvennogo transporta // Simvol
nauki, 2016. – №3-3. – [Elektronnyi resurs]. URL:
http://cyberleninka.ru/article/n/klient-servernoe-prilozhenie-dlya-poiska-optimalnogo-marshruta-i-vizualizatsii-dvizheniya-obschestvennogo-transporta
(data obrashcheniya: 23.01.2018).
3. Gurin N.I.,
Krylova T.A. Internet-prilozhenie na platforme Node dlya elektronnoi
birzhi perevozok // Trudy BGTU. Seriya 3: Fiziko-matematicheskie nauki i
informatika, 2016. – №6 (188). [Elektronnyi resurs]. URL:
http://cyberleninka.ru/article/n/internet-prilozhenie-na-platforme-node-dlya-elektronnoy-birzhi-perevozok
(data obrashcheniya: 23.01.2018).
4. Svobodnaya entsiklopediya
Vikipediya. – [Elektronnyi resurs]. URL: https://ru.wikipedia.org/wiki/Node.js
(data obrashcheniya: 23.01.2018).
Crimean Engineering and Pedagogical
University
per. Uchebniy, 8, Simferopol,
Republic of Crimea, 29015.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.