Что такое узел?
Лучше попытаться охватить все при написании чего -либо, поэтому я также взял несколько основных концепций из Интернета. Некоторые места изменили свое понимание моего собственного. Если у вас есть какое -либо понимание этих концептуальных вещей, вы можете пропустить этот абзац.
1.Node-это интерпретатор JavaScript на стороне сервера, но я действительно думаю, что студенты, которые хорошо разбираются в JavaScript, могут легко получить узел, изучая узлы, так что вы ошибаетесь. Резюме: я не знаю, является ли вода глубокой или нет, но она действительно не мелкая.
2. Цель Node состоит в том, чтобы помочь программистам создать высоко масштабируемые приложения и записать коды соединения, которые могут одновременно обрабатывать десятки тысяч соединений с физической машиной. Обработка высокой параллелистики и асинхронного ввода/вывода является одной из причин, по которой узел привлек внимание разработчиков.
3. Самоуд запускает двигатель Google V8 JavaScript, поэтому скорость и производительность очень хороши. Вы можете увидеть это, посмотрев на Chrome. Более того, в то время как узел инкапсулирует его, он также улучшает свою способность обрабатывать двоичные данные. Следовательно, узел не только просто использует V8, но и оптимизирует его, чтобы сделать его более мощным в различных средах. (Что такое v8 JavaScript Engine? Пожалуйста, «Baidu знает»)
4. Сторонние расширения и модули играют важную роль в использовании узла. Следующее также будет представлена загрузка NPM. NPM - это инструмент управления модулем. Используйте его для установки различных программных пакетов узлов (таких как Express, Redis и т. Д.) И опубликуйте программные пакеты, которые вы написали для узла.
Установите узел
Вот краткое введение в установку узла в двух средах: Windows 7 и Linux. При установке вы должны обратить внимание на версию Python. Установка не удалась много раз из -за проблем с версией Python. Рекомендуется, чтобы версия 2.6+ имела ошибки установки узлов. Если вы запросите версию Python, вы можете ввести: pyhton -v
1. Давайте сначала представим установку под Linux. Узел очень удобен для установки и использования в среде Linux. Рекомендуется запустить узел под Linux. ^_^... Я использую Ubuntu11.04
а Установка Пакет зависимостей: 50-100 КБ/с Каждый пакет может быть загружен и установлен за одну минуту.
Кода -копия выглядит следующим образом:
sudo apt-get установить g ++ curl libssl-dev apache2-utils
sudo apt-get установить git-core
беременный Запустите команду шаг за шагом в терминале:
Кода -копия выглядит следующим образом:
git clone git: //github.com/joyent/node.git
Узел CD
./configure
Делать
sudo сделать установку
Если установка гладкая, узел будет успешно установлен, и для 2 -метровой сети потребуется в общей сложности 12 минут.
Примечание. Если вы не используете GIT для загрузки исходного кода, вы можете загрузить исходный код напрямую, но вам необходимо обратить внимание на проблему версии узла при загрузке и установке. Он наиболее удобен для загрузки и установки с помощью GIT, поэтому рекомендуется.
2. Используйте Cygwin для установки узла на Windows. Этот метод не рекомендуется, потому что это действительно занимает много времени и хорошего характера. Моя система - флагманская версия Win7
Cygwin - это среда моделирования UNIX, работающая на платформе Windows. Адрес загрузки: http://cygwin.com/setup.exe.
После загрузки Cygwin запустите установку. Шаги:
а Выберите источник загрузки - установить из Интернета
беременный Выберите корневой каталог для загрузки и установки
в Выберите каталог, где хранится файл загрузки
дюймовый Выберите метод соединения
эн. Выберите веб -сайт для скачивания - http://mirrors.163.com/cygwin
фон Проблема на этом шаге, пришло время проверить вашего персонажа. Требуемое время загрузки и установки неясно. В любом случае, это занимает много времени (более 20 минут), и иногда происходит сбой установки. Нажмите на значок «Ротари Стрелка» перед каждой упаковкой, чтобы выбрать нужную версию. При выборе знак «x» будет указывать на то, что пакет был выбран. Выберите пакет, который вы хотите скачать:
Кода -копия выглядит следующим образом:Devel Package:
GCC-G ++: C ++ Компилятор
GCC-Mingw-G ++: Mingw32 Поддержите заголовки и библиотеки для GCC C ++
GCC4-G ++: G ++ Subpackage
GIT: Fast версий контроля системы основных файлов
сделать: версия утилиты «сделать» GNU
openssl-devel: среда разработки openssl
PKG-CONFIG: утилита, используемая для получения информации об установленных библиотеках
Zlib-Devel: библиотека сжатия/декомпрессии Zlib (разработка)
Редакторный пакет: VIM: VI улучшил Enhanced VI Editor
Пакет Python: переключатель по умолчанию для установки состояния
Веб -пакет:
Wget: Утилита для извлечения файлов с www через HTTP и FTP
Curl: инструмент командной строки многопротокола передачи файлов
Предыдущий скриншот, сделайте загрузку Zlib-Devel в качестве примера:
После нескольких шагов окружающая среда завершена. Однако еще не время установить узел. Вам все еще нужно выполнить Rebaseall в режиме пепла Cywgin. Шаги следующие:
а Командная строка CMD
беременный Введите подкаталог бин в каталоге установки Cygwin
в Запустите пепел, чтобы войти в режим оболочки
дюймовый ./rebaseall -v
эн. Закрыть окно командной строки без ошибок
Хорошо, теперь пришло время загрузить и установить узел, запустить cygwin.exe и введите:
Кода -копия выглядит следующим образом:
$ wget http://nodejs.org/dist/node-v0.4.12.tar.gz
$ tar xf node-v0.4.12.tar.gz
$ CD NODE-V0.4.12
$./configure
$ make
$ make install
3. Download Node.exe файл напрямую напрямую
Перейдите прямо на Nodejs.org, чтобы загрузить. Я слышал, что есть нестабильные проблемы, но если вы просто хотите сначала узнать о узле в Windows, я лично чувствую, что этот метод намного лучше, чем установка Cygwin.
Примечание: я действительно не хотел писать абзац установленного узла, но я все еще написал его для полной статьи этой статьи. Я не ожидал, что это будет так долго, пока я написал это ... это журнальный столик
«Привет, мир» - почему я чувствую себя немного взволнованным каждый раз, когда вижу это предложение, и я озадачен ...
Во -первых, создайте файл hello.js и скопируйте следующий код в файле:
Кода -копия выглядит следующим образом:
var http = require ('http');
http.createserver (function (req, res) {
res.writehead (200, {'' content-type ':' text/plain '});
res.end ('Hello World/N');
}). Слушайте (1337, "127.0.0.1");
console.log ('сервер, работающий по адресу http://127.0.0.1:1337/');
Логика кода:
а Глобальный метод требует () используется для импорта модулей. Как правило, возвращаемое значение метода require () присваивается непосредственно переменной, и эта переменная используется непосредственно в коде JavaScript. Требуется («http») - это загрузка предустановленного HTTP -модуля системы
беременный http.createserver - это метод модуля, цель состоит в том, чтобы создать и вернуть новый объект веб -сервера и привязать обратный вызов с службой для обработки запроса.
в HTTP -сервер можно прослушать на конкретном порте через метод http.listen ().
дюймовый Console.log Само собой разумеется, те, кто знает Firebug, должны знать, что узел реализует этот метод.
Примечание. Для получения конкретной информации, пожалуйста, проверьте документ cnodejs.org/cman/all.html#http.createserver
Затем запустите сервер узлов, выполните код hello.js, и после успешного запуска вы увидите текст в console.log (). Есть картинки и правда:
Скачать и использовать NPM
В дополнение к API, предоставленному самим узлом, в настоящее время существует много сторонних модулей, которые могут значительно повысить эффективность разработки. NPM - это диспетчер пакетов Node, который может использовать его для установки необходимых программных пакетов и публикации программных пакетов, написанных для Nodejs. Официальный адрес веб -сайта: npmjs.org
Установка требует написания только одной строки кода в терминале:
Кода -копия выглядит следующим образом:
Curl http://npmjs.org/install.sh | шнур
NPM устанавливает пакет расширения узлов с той же строкой кода:
Кода -копия выглядит следующим образом:
NPM Install <имя пакета> // Пример: NPM Install Express
Примечание. Если при установке модуля сообщается об ошибке доменного имени, пожалуйста, очистите кэш> npm Cache Clean или перезапустите компьютер.
Понять концепцию модуля узла
В узле различные функциональные компоненты делятся на разные модули. Приложение может выбрать и использовать соответствующий модуль в соответствии с его потребностями. Каждый модуль будет обнародовать некоторые общие методы или атрибуты. Пользователь модуля может напрямую использовать эти методы или атрибуты, и нет необходимости понимать внутреннюю детали реализации. В дополнение к API, предоставленному самим узлом, разработчики также могут использовать этот механизм для разделения приложений на несколько модулей для улучшения повторного использования кода.
1. Как использовать модули?
Очень удобно использовать модули в узле. В коде JavaScript вы можете напрямую использовать глобальную функцию require () для загрузки модуля.
В примере «Hello World» только сейчас требуется («http») может загрузить системный предварительный модуль HTTP; Имя модуля начинается с "./", например, require ("./ mymodule.js") для загрузки модуля mymodule.js в том же каталоге, что и текущий файл Javascript.
2. Как разрабатывать модули самостоятельно?
Когда я только что представил, что при использовании require () для импорта модуля имя модуля начинается с «./» - это файл модуля, который я разработал сам. На что вам нужно обратить внимание на системный путь файла JS.
Внутренняя логика обработки модуля инкапсулируется в коде. Модуль, как правило, выявляет некоторые публичные методы или атрибуты для других людей. Внутренний код модуля должен разоблачить эти методы или атрибуты.
3. Давайте возьмем простой набор примеров. Сначала создайте файл модуля, такой как mymodule.js, только одна строка кода
console.log ('Привет, Даррен.')
Затем создайте файл test.js, импортируйте этот файл JS и выполните узел, чтобы увидеть результаты
В сообществе узлов сейчас есть много сторонних модулей. Я надеюсь, что все больше людей могут присоединиться к этой большой семье, изучая узлы и внести свой вклад в сообщество узлов. Заранее спасибо, давайте продолжим.
4. Возьмите более глубокий пример. В этом примере будут представлены частные и общие. Сначала создайте mymodule.js, код выглядит следующим образом:
Кода -копия выглядит следующим образом:
var name = "darren";
this.location = "Пекин";
this.showlog = function () {
console.log ('Привет, Даррен.')
};
В коде есть три типа, а именно: частные атрибуты, общие атрибуты и общие методы, а затем создайте test.js и выполнять узел
Выделенная область ясно говорит нам, что мы не можем получить частные методы за пределами модуля, поэтому они не определены. Декларации общих атрибутов и общих методов должно предшествовать ключевое слово.
Что может сделать узел и его преимущества
Основные идеи узла: 1. Не блокировка; 2. Однопользованный; 3.
В текущих веб-приложениях некоторые взаимодействия между клиентом и сервером можно считать на основе событий, поэтому Ajax является ключом к своевременному ответу страницы. Каждый раз, когда отправляется запрос (независимо от того, насколько малы запрошенные данные), он будет идти вперед и назад в сети. Сервер должен ответить на этот запрос, обычно открывая новый процесс. Тогда чем больше пользователей посещают эту страницу, тем больше запросов они будут инициированы, и будут такие проблемы, как переполнение памяти, конфликты, вызванные логическим промежутком, параличом сети и сбоями системы.
Цель узла - предоставить решение для создания масштабируемых сетевых приложений. В примере Hello World сервер может одновременно обрабатывать многие клиентские подключения.
Узел и операционная система имеют соглашение о том, что, если создана новая ссылка, операционная система уведомит узел, а затем перейдет в Hibernation. Если кто -то создает новую ссылку, то он (узел) выполняет обратный вызов, каждая ссылка занимает лишь очень маленькую (память) накладные расходы.
Возьмите простой пример асинхронных вызовов, подготовить тест.js и mymydule.js, ^_ ^. Скопируйте следующий код в test.js и выполнить:
Кода -копия выглядит следующим образом:
var fs = require ('fs');
fs.readfile ('./ mymodule.js', function (err, data) {
if (err) бросить ошибку;
console.log («успешно»);
});
console.log ('async');
Асинхронно, каждый должен быть в состоянии думать, что время выполнения сначала отображает «асинхронизированное», а затем «успешно».
Узел не блокирует, и когда новый запрос прибывает на сервер, для этого запроса нет необходимости делать что-либо отдельно. Узел просто ждет просьбы, и обрабатывает запрос, если есть запрос.
Узел лучше обрабатывать запросы малого размера и ввод-вывод на основе событий.
Узел-это не просто основа для создания веб-службы, он может делать больше, например, он может выполнять службы сокетов, например, на основе файлов, а затем на основе некоторых примеров, могут быть дочерние процессы, и внутри это очень полный механизм событий, включая некоторые асинхронные не инъекционные решения, а не ограничивать первый слой сети. В то же время он может, даже в качестве веб -службы, предоставить больше функций, которые могут проникнуть в ядро и ядро сервиса. Например, агент HTTP, используемый узлом, заключается в том, что он может проникнуть в ядро обслуживания и выполнять некоторые функции.
Концепция потока событий узла
Поскольку узел принимает режим, управляемый событиями, многие модули будут генерировать различные события, а модуль может добавлять методы обработки событий. Все объекты, которые могут генерировать события, являются экземплярами класса EventEmitter в модуле событий. Код является общим языком во всем мире, поэтому мы все еще используем код для выступления:
Кода -копия выглядит следующим образом:
var events = require ("events");
var Emitter = new Events.Eventemiter ();
Emitter.on ("myevent", function (msg) {
console.log (msg);
});
eMitter.emit ("myevent", "Hello World");
Краткий анализ этого абзаца:
1. Используйте метод retem () для добавления модуля событий и назначить возвращаемое значение переменной
2. Новое предложение Events.Eventemitter () создает триггер событий, который является так называемым экземпляром класса EventEmitter в модуле событий.
3. On (Event, слушатель) используется для добавления обработчика событий в событие события
4. Emit (Event, [arg1], [arg2], [...]) используется для генерации событий. Каждая функция слушателя в списке прослушивателя выполняется последовательно с предоставленными параметрами в качестве параметров функции слушателя.
Методы в классе EventEmitter связаны с генерацией и обработкой событий:
1. AddListener (событие, слушатель) и ON (Event, слушатель) - оба методы, которые добавляют слушателя к окончанию массива слушателя указанного события.
2. Однажды (событие, слушатель) Этот метод добавляет одноразового слушателя для событий. Слушатель выполняется, когда событие будет запущено в первый раз, а потом будет удален
3. RemoveListener (событие, слушатель) Этот метод используется для удаления слушателя из массива слушателя указанного события.
4. Emit (Event, [arg1], [arg2], [...]) только что упомянуто.
В узле существуют различные потоки данных, а поток является абстрактным интерфейсом, реализованным различными объектами. Например, запрос на запрос HTTP -сервера - это поток, аналогичный STDOUT (стандартный выход); включая файловую систему, HTTP -запросы и ответы, а также соединения TCP/UDP. Поток может быть читаемым, записываемым или как читаемым, так и для записи. Все потоки являются экземплярами EventEmitter, поэтому могут быть сгенерированы различные события.
Читаемый поток в основном создает следующие события:
1. Data Это событие запускается при чтении данных в потоке.
2. Определите, когда в потоке нет данных, это событие запускается
3. Возвращение этого события запускается, когда при чтении данных возникает ошибка.
4.close Когда поток будет закрыт, это событие запускается, но не все потоки вызовут это событие. (Например, поток HTTP -запросов, входящий в соединение, не запустит событие «закрыть».)
Существует также более специальное событие FD, которое запускается, когда в потоке принимается дескриптор файла. Только потоки UNIX поддерживают эту функцию, и никакие другие типы потоков не запустили это событие.
Связанная подробная документация: http://cnodejs.org/cman/all.html#events_
Мощный модуль файловой системы файловой системы
Модуль FS в узле используется для работы в локальной файловой системе. Ввод/вывод файла инкапсулируется стандартной функцией POSIX. К этому модулю необходимо получить доступ с использованием require ('fs'). Все методы обеспечивают асинхронные и синхронные методы.
Методы, представленные в модуле FS, могут использоваться для выполнения основных файловых операций, включая чтение, написание, переименование, создание и удаление каталогов и получение метаданных файлов. Каждый метод рабочих файлов имеет две версии: синхронные и асинхронные версии.
Версии асинхронных операций будут использовать метод обратного вызова в качестве последнего параметра. Когда операция будет завершена, будет вызван метод обратного вызова. Первый параметр метода обратного вызова всегда зарезервирован как исключение, которое может произойти во время работы. Если операция является правильной и успешной, значение первого параметра является нулевым или неопределенным.
Название метода синхронной операционной версии состоит в том, чтобы добавить синхронизацию в качестве суффикса после соответствующего асинхронного метода. Например, синхронной версией метода асинхронного rename () является renamesync (). В следующем перечислены некоторые общие методы в модуле FS и представляет только версию асинхронной работы.
Готовы ли файлы test.js и mymodule.js? Скопируйте следующий код в test.js один раз
Кода кода следующая: var fs = require ('fs');fs.unlink ('./ mymodule.js', function (err) {
if (err) бросить ошибку;
console.log ('успешно удалил mymodule.js');
});
Если ошибки нет, то mymodule.js будет удален. Это так просто
Это просто простой пример. Если вы заинтересованы, попробуйте сами и попрактикуйтесь в правде. Из -за космических причин я не приведу много примеров. ^_^
Краткое изложение узла обучения:
1. Для меня, который имеет почти нулевые знания по командам и оболочкам Linux, я много знал о Linux в течение этого периода. Vim действительно мощный редактор, и мне очень приятно не использовать мышь; И для меня очень важна одна вещь. Программирование под Linux очень круто, особенно в команде, которая используется для установки более здорового^_^.
2. Понять успешную структуру для JavaScript на стороне сервера - узла, а также некоторые из его преимуществ и использования, эта статья является лучшей резюме, конечно, это будет только начало.
Некоторые вещи сказать всем:
1. Я должен поразить энтузиазм некоторых людей здесь. Если вы недостаточно знаете о технологии бэкэнд или никогда не подвергались воздействию языка сервера, не знаете о вводе/выводе и не имеете концепции потока обработки бэкэнд, то ... Узел не является технологией на стороне сервера, подходящей для начального уровня. Почему ты так говоришь:
а Ключевым моментом является то, что на китайском языке есть несколько примеров и статей, поэтому будет более трудно учиться систематически, поэтому во время использования всегда есть незрелый ощущение, конечно, это в основном вызвано моей незнакомым с ним. В Китае действительно не так много компаний, использующих узлы, и, конечно, за рубежом еще много. Я сфотографировал с cnodejs.org:
3. У меня на самом деле есть некоторые сожаления о том, что не вошли в компанию, о которой мечтает, но жизнь должна быть такой, с взлетами и падениями, что именно то, что мне нужно, и ожидать ... тогда я все еще должен продолжать свою новую жизнь, быть вашим собственным руководителем, схватить свое собственное направление и пусть он пройдет прошло.
беременный Для неопытных друзей узел нелегко начать. Это можно увидеть из самых простых «Hello World» (понимание различных среды эксплуатации и деталей установки требует некоторых усилий). Не сравнивайте библиотеку jQuery. Обработанные вещи разные, и затраты на обучение также разные. Поэтому не рекомендуется быть технологией на стороне сервера для начинающих. Если вы хотите выучить языковой PHP и Phyne PHP на стороне сервера, это хороший выбор, потому что: есть много книг, примеров, нескольких структур и множество практических, простых и легких для понимания и построения ...
C. Выше приведены мои личные предложения. Из -за моего ограниченного уровня, пожалуйста, дайте мне несколько советов и надеюсь быть беспощадным.
2. Я не уродлив в отношении стандартов написания узлов и конкретных навыков. У меня не так много кода, чтобы написать узел, но идея программирования, ориентированная на объект, везде хороша.
3. Я надеюсь, что эта статья будет полезна всем, чтобы изучить узел