Путешествие в Node JS!

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

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

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

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

Требования

Использование Node JS требует знакомства с командной строкой, и если на вашей машине ее еще нет, вам нужно будет установить ее на свою машину.

Привет мир

После того, как вы установили Node, запустить программу Hello World довольно просто. Выкладываю это сейчас, потому что для меня заставить что-то работать — это обычно мой первый шаг в путешествии. Тем не менее, этот пост посвящен в основном тому, что такое Node JS и почему он уникален.

Задний план

Node JS, первоначально выпущенный в 2009 году Райаном Далем, помогает переопределить место Javascript в мире, сделав его эффективным при выполнении серверных приложений.

Хотя это была не первая серверная платформа Javascript — эта заслуга принадлежит Netscape LiveWire Pro Web в 1996 году — она отличается тем, что управляется событиями — другими словами, управляется событиями, такими как клики пользователя. Его также отличает способность эффективно взаимодействовать с клиентами, файлами и базами данных, не задерживая выполнение других задач.

А с помощью правильных модулей, таких как fs (файловая система), http и MySQL, серверные программы могут взаимодействовать с файловой системой, базой данных и клиентом браузера.

Что меня привлекает в Node

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

Введение в блокирующий и неблокирующий ввод-вывод

Одна «внутренняя» функция, которая делает Node JS полезным, — это неблокирующий ввод-вывод или неблокирующий ввод-вывод.

Что это значит?

Ввод/вывод, или ввод/вывод, относится к программе, взаимодействующей с внешним миром путем получения или отправки информации.

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

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

Блокировка против неблокировки

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

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

Прежде чем мы подробно рассмотрим неблокирующий ввод-вывод, давайте сначала более подробно рассмотрим потоки и процессы, в которых они находятся.

Потоки и процессы

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

Однопоточный против многопоточного

Различные языки программирования имеют разные способы обработки процессов и потоков. Некоторые, например Javascript, могут выполнять только одну единицу выполнения за раз и называются однопоточными. Другие, например Java и C#, могут выполнять несколько задач и иметь несколько потоков, работающих в одном процессе.

Блокировка ввода/вывода

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

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

Неблокирующий ввод-вывод

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

Неблокирующие операции в Node JS асинхронны.

Кроме того, неблокирующие операции в Javascript являются асинхронными (или для краткости асинхронными), что означает, что последовательность запросов и ответов не требует постоянного внимания со стороны программы или выполняется как последовательные шаги. Вы можете начать изучать асинхронные запросы на w3schools, и скоро здесь появится пост об асинхронных запросах.

Надеюсь это поможет!

Это был краткий обзор Node JS и неблокирующего ввода-вывода. Более подробную информацию о блокирующем и неблокирующем вводе-выводе можно найти на сайте Node JS.