дійними (наприклад, автоматично перезапускатися після збою), легко керованими (добре інтегруватися до прийнятої практики адміністрування системи), що допускають спостереження (зберігати все, що виведено на STDOUT в журнали) і т.д. Node - це, швидше, конструктор, що включає деталі для побудови серверів, а не готовий, закінчений сервер. Для реалізації цього веб-сервера на платформі Node необхідно написати скрипти для інтеграції із засобами управління фоновими процесами, наявними в ОС, для ведення журналів, для забезпечення захисту від шкідливих клієнтів, наприклад DoS-атак, і багато іншого.
Нижче перераховані інструменти та методики інтегрування Node-серверів із засобами управління фоновими процесами в декількох операційних системах, що дозволяють гарантувати безперервне присутність сервера, починаючи з моменту ініціалізації системи: autorestart (http://github/shimondoodkin/nodejs-autorestart) -управління екземпляром Node в тих дистрибутивах Linux, де використовується Upstart (Ubuntu, Debian та ін.); (http://github/pgte/fugue) спостерігає за Node-сервером і перезапускає його після збою; (http://github/indexzero/forever) -невелика командна утиліта Node, яка гарантує, що скрипт буде працювати «вічно». Про те, що таке «вічно», Чарлі Роббінс (CharlieRobbins) написав статтю в блозі (# justify gt; засіб Upstart для Ubuntu (# justify gt; в Mac OS X необхідно написати скрипт для launchd. Apple розмістила посібник зі створення launchd-скриптів за адресою # justify gt; .3 Використання всіх процесорних ядер в многоядерной системі
- однопотоковий движок JavaScript. Для браузера Chrome цього достатньо, проте означає, що Node-сервер, що працює на щойно купленому 16-ядерному сервері, задіє всього одне ядро, а 15 інших простоюють.
однопоточні процес використовує тільки одне процесорний ядро. Це факт, від якого нікуди не дінешся. Щоб задіяти в одному процесі кілька ядер, необхідна багатопотокова програма. Проте прийнята в Node парадигма проектування без потоків, хоча і дозволяє спростити модель програмування, одночасно означає, що Node не використовує кілька ядер.
Є кілька проектів, присвячених розробці многопроцессного конфігурацій Node для підвищення надійності та задіяння всіх наявних процесорних ядер.
Основна ідея полягає в тому, щоб запустити декілька процесів Node і розподіляти між ними надходять запити. Маючи кластер з однопоточних процесів, ви зможете використовувати всі ядра.
Один з таких проектів називається Cluster (http://github/LearnBoost/cluster), автори описують його як «розширюваний менеджер багатоядерних серверів для Node.js». Він запускає конфігурується набір дочірніх процесів, перезапускає їх після збою і має багатими засобами протоколювання, управління з командного рядка та збору статистики. Більш ранній проект Spark закрився, поступившись місцем Cluster.
3. Модулі Node
Модулі та пакети - це будівельні блоки, що дозволяють розбити додаток на більш дрібні частини.
На реалізацію модулів Node справила великий вплив специфікація модулів CommonJS, хоча є й відмінності. Але ці відмінності виявляються, тільки якщо писати спільний код для Node та інших систем, заснованих на CommonJS. Побіжний погляд на специфікацію Modules/1.1.1показивает, що відмінності другорядні.
. 1 Як Node шукає модулі, витребувані в require ( module )?
У Node модулі зберігаються у файлах, в кожному файлі по одному модулю. Є кілька підходів до іменування модулів і до розміщення їх у файловій системі. В цілому виходить вельми гнучка система, особливо в поєднанні з npm, стандартним менеджером пакетів для Node.
Ідентифікатори модулів та шляхи
Взагалі кажучи, ім'я модуля - це шлях, але без розширення імені файлу. Таким чином, коли ми пишемо require ( ./ simple ), Node знає, що необхідно додати до імені файлу розширення .js і завантажити файл simple.js.
Природно, очікується, що файли, імена яких закінчуються на .js, містять код, написаний на JavaScript. Node підтримує також модулі у вигляді довічних платформних бібліотек. У такому випадку ім'я файлу повинна закінчуватися розширенням .node.
Деякі модулі Node не є файлами в файловій системі, а «зашиті» в виконуваний файл Node. Це модулі ядра (Core), документовані на сайті nodejs. Спочатку вони існують у вигляді файлів в дереві вихідного коду Node, але в ході збірки прикомпилируется до виконуваного файлу.
Існують три типи ідентифікаторів модулів: відносні, абсолютні і верхнього рівня.
Відносні ідентифікатори модулів починаються рядком ./ або ../ raquo ;, а абсолютні - рядком / raquo ;. Тут ...