NodeJS - технология будущего.


Современные технологии не стоят на месте и с невероятной скоростью движутся вперёд. Одним из приятных творений прогресса стал NodeJS. Что же он из себя представляет?Node переносит V8 с клиентской машины на сервер, позволяя разработчикам строить серверные приложения теми же способами, которыми строится клиентская часть на JavaScript. Node построена на основе V8, интерпретатора (хотя можно назвать и компилятором) JavaScript с открытым исходным кодом, сердца браузера Google Chrome.

За счёт оптимизации и пребразования javascript в assembler, а затем в нативный машинный код, платформа позволяет достич нам больших скоростей. Основной парадигмой разработки является событийно ориентированное программирование. Все мы привыкли к событиям на десктопных программах, но понятия не имеем какие же события могут быть на серверной стороне? На первый взгляд это кажется непонятным, но немного наловчившись можно почувствовать истинную мощь этой парадигмы. Она открывает новые возможности. Всё, для чего раньше приходилось придумывать различные хаки и костыли — теперь делается интуитивно понятно и быстро.

Другой приятной особенностью данной архитектуры является асинхронность. Node способен делать асинхронные I/O операции за счёт встроенного EventLoop. Благодаря этому платформа способна обрабатывать десятки тысяч запросов, используя при этом всего 1 поток, что позволяет значительно снизить нагрузку на сервер. Из коробки доступен менеджер паретов npm. Он позволяет быстро найти и установить нужные вам модули. Благодаря событийной моделе NodeJS идеально подходит для real-time проектов.


Node.js — это платформа с двухлетней историей специально разработанная для построения динамических сетевых приложений.

Запустить простой веб-сервер займёт всего пару минут. Для этого создадим файл server.js со следующим содержимым:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8888, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8888/');

Для запуска сервера нужно выполнить следующую комманду: node server.js
Теперь, перейдя в браузере на localhost:8888, мы увидим сообщение Hello World

Но nodejs предназначен не только для создания быстрых асинхронных веб серверов. На нём можно так же легко создать TCP сервер. Вот простой пример echo сервера:

var net = require('net');

var server = net.createServer(function (socket) {
  socket.write("Echo server\r\n");
  socket.pipe(socket);
});

server.listen(1337, "127.0.0.1");



Voxer: рация на Node


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

Мэтт Рэнни и его команда изначально задумывали Voxer как двустороннее радио для военных, и начали писать в старом добром C++. «Именно такие вещи вы используете для серьёзных высоконагруженных военных приложений», говорит Мэтт. Но C++ оказался слишком сложным и негибким для проекта, поэтому он переключился на Python, язык более высокого уровня на котором сделаны многие сервисы в компаниях вроде Google, Yahoo! и NASA. Но Python оказался слишком медленным, поэтому Мэтт переключился на Node.

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

Мэтт Рэнни понял что такая архитектура идеальна для приложения типа Voxer, которое требует необычно низкого времени отклика при необычно высоком числе одновременно открытых соединений. «Если Вы хотите сделать приложение в котором пользователь получает от сервера постоянный поток обновлений, Вам придётся открыть множество соединений с сервером. В архитектуре вроде PHP это довольно затратно. Но в Node это практически бесплатно. Вы можете держать соединения очень долго время и цена обработки одного соединения будет оставаться довольно низкой,» рассказывает Рэнни The Register.

«Node это лучшее от обоих миров. Мы получаем Javascript, который хорошо подходит для такого программирования, и мы получаем высокую производительность сервера.»

Когда он начал строить Voxer, Рэнни провёл тест чтобы узнать сколько соединений он сможет открыть с одним сервером. «Я просто решил открыть столько соединений сколько смогу, просто чтобы посмотреть когда всё развалится,» говорит Рэнни. «С Node я смог открыть, скажем так, все. Я уже не мог открыть больше соединений не получая дополнительный IP-адрес для тестовой машины. Node использует так мало памяти, это удивительно. У меня кончились номера портов


Заключение



В некоторых кругах Кремниевой долины Node называют новым PHP. Или новым Ruby on Rails. Или новым чёрным. Это «новый большой бум», если верить тем кто использует эту платформу (я отношу себя к тем «немногим»).

Целью этой статьи не было научить вас синтаксису, или показать готовые приложения. Я всего лишь хотел познакомить вас с этой платформой.Надеюсь вас заинтересует эта технология и содастся азербайджанское сообщество nodejs. Надеюсь я буду не 1 :)

Я планирую написать серию статей о NodeJS, Django, Play Framework и если эта статья вам понравилась, то в следующей я расскажу о разработке LearnBoost — технологии «socket.io» и её имплементации на node.

Узнать больше о nodejs вы можете на оффициальном сайте проекта.

Комментарии (8)

RSS свернуть / развернуть
+
0
спасибо) интересная технология, правда руки не доходили попробовать.
Последнее время активно изучаю play framework. Было бы интересно почитать о нем, правда что-нибудь не на уровне Hello World.
avatar

Mecid

  • 18 июля 2011, 02:50
+
+1
Ок, постараюсь написать интересную статью. На подходе socket.io.Очень интересный протокол, от которого я остался в восторге. Был бы ещё стимул для написания статей. Отзывы читателей…
avatar

motakuji

  • 18 июля 2011, 13:35
+
0
аудитория небольшая тут к сожалению
avatar

Mecid

  • 19 июля 2011, 15:13
+
+2
Ну да, это точно… Отзывы читателей дают стимул. Но и любителей UNIX-a у нас не много =) Mecid, насчет аудитории, скоро она опять будет в нормальном режиме) Стараемся)
avatar

Farik

  • 19 июля 2011, 15:26
+
+1
надеемся) мы постоянно тут)
avatar

Mecid

  • 19 июля 2011, 16:01
+
+2
А жалко, что народ не тянется к никсам.Кто-то вообще понятия не имеет что это такое, а кто-то просто не почуствовал их преимущества. Особенно на серверных платформах. Сам сижу только на убунте. Гружусь по виндой только лишь из-за спецефического софта и игрушек(CSS) :) Знаю, что можно и через wine, но из под винды стабильнее пашет.
avatar

motakuji

  • 19 июля 2011, 16:42
+
+1
Как-то ковырял NodeJS, но т.к. не было необходимости создавать что-то высоконагруженное, не стал углубляться.
avatar

baxi

  • 19 июля 2011, 17:53
+
0
Тут даже не в нагрузке дело, а в специфике. Делать веб-сайт на node не очень удобно.Но вот для real-time — самое оно. Делал benchmark express, django, play!: с большим отрывом впереди был play!, но памяти ел много(сколько пропишешь в конфиге).Тест производился не на простом хелло ворлд. Выводился небольшой шаблон с переменными. Хотел проверить что быстрее обработает. Как-нибудь и это опубликую :)
avatar

motakuji

  • 20 июля 2011, 03:47

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.