Знакомьтесь: Node.JS

node.js
Посторонись, пресловутый PHP! Долой Java! Старичок Perl, тебе так вообще давно пора на пенсию. И как же вы уже достали, попсовые Ruby и Python! Все эти давно знакомые технологии уже не торкают. Зато сегодня мы посмотрим на чрезвычайно прогрессивный подход, когда для написания серверного кода используется… JavaScript.
Именно так и начинается статья на xakep.ru, которую я советую прочитать. 
Node.JS — событийно-ориентированный (асинхронный) I/O фреймворк на движке V8 JavaScript от Google, дополненный системными библиотеками и прочими вкусностями. И очень, очень быстрый.
Современный публичный Web-сервис при ответе на запрос клиента можно представить в следующем виде:
БД <-> обработчик запросов --(контейнер)--> генератор страницы
Причем основная задача обработчика запросов – выбрать из БД нужные данные и обвернуть их в контейнер, далее на клиенте эти данные "облагораживаются", принимают человеческий вид генератором страницы. А теперь разберемся с языком на котором это все будет работать, и начнем с генератора страниц.
Представим себе типичного Юзера со стандартным браузерам и системой, в которой каждой твари по одной (Flash, Silverlight, Java). Да, какой простор для действий: банеры у нас будут на Flash, сам сайт на Silverlight, а через Java мы будем подгружать трояны. Юзеру-то какая разница: он их не заметит. А для тех, у кого антивирус, сделаем пошаговую инструкцию по его отключению: мол, если вы его не отключите, сайт будет работать некорректно (так же поступают и установщики программ, когда выводят "Перед началом установки закройте все приложения и отключите антивирус").
Теперь Юзер поумнел – поставил нормальный браузер и отключил в нем плагины. У нас остался JavaScript. Ну, что ж, отлично: не надо ничего выбирать. Теперь выбираем один из стандартных контейнеров. Может XML (ведь даже XMLHttpRequest начинается с XML)? Или всетаки JSON? Не буду долго философствовать на эту тему и скажу сразу – однозначно, JSON. Если дорогой читатель не доверяет моему выбору, то милости прошу читать эти две статьи: Что такое JSON? и JSON и XML. Что лучше?. С контейнером разобрались, теперь переходим к обработчику запросов, а тут опять целый зоопарк: и PHP и ASP.NET, который лучше бы смотрелся в паре с Silverlight, и еще куча всего. Опять муки выбора.
А тем временем нашего Юзера совсем запугали: "все скрипты на страницах – зло и одна большая дыра", и после этого он решает отключить JavaScript. Что же нам делать? Ведь мы уже столько классных вещей написали, даже не забыли про WOW-эффекты, и это все на JavaScript, а наш Юзер увидит только белую страницу с надписью "Включите JavaScript". Но после предыдущей просьбы отключить антивирус он ничего не будет делать и просто уйдет на другой сайт. Вы думаете, все плохо и пора бить об стенку некогда любимого нами Юзера? Но постойте, он на самом деле дал нам подсказку: помните, выше мы не могли выбрать обработчика запросов? Теперь у нас есть отличный кандидат – Node.JS. Смотрите сами: для клиента JavaScript уже написан, и на сервере у нас опять же JavaScript, так почему бы не перенести для таких Юзеров часть кода на сервер с минимальными изменениями? Сказано – сделано, и Юзер счастлив, и нам работы было мало.
Причем использование одного языка на сервере и клиенте и возможность обмена кода сервера и клиента – не основные фишки Node.JS. Основной по праву должна считаться его скорость и его неблокирующая (асинхронная) природа, так хорошо подходящая для облачных вычислений. Про это как раз написано в этой замечательной статье: Вы наверное шутите, мистер Дал, или почему Node.js — это венец эволюции веб-серверов.
До этого мы говорили только о динамичном контенте. А что делать со статикой? И тут ответ прост: статику – легковесным lightppd, nginx, или 0W-httpd.
Теперь, уважаемый читатель, ты готов к прочтению полной версии статьи, о которой упоминалось в самом начале (xakep.ru) – Атака на другой мир или серверный JavaScript.
Далее советую почитать следующее:
- Как избавиться от пристрастия к синхронности
- Асинхронность: почему это никак не сделают правильно?
- Веб-приложения реального времени: jSocket,Node.JS, Redis, MQ. Часть 1.
- Веб-приложения реального времени: jSocket,Node.JS, Redis, MQ. Часть 2.
- Node.JS — Основы асинхронного программирования, часть 1
- Node.JS: Пример HTTP-сервера в режиме prefork с использованием Web Workers
- http://nodejs.ru
- Использование нескольких ядер/процессоров в Node.js: порождаем воркеры
- Записи о Node.JS от kuroikaze85
Не стоит ограничиваться только этими статьями, хорошей идеей было бы порыться на этих сайтах, там много чего еще есть интересного.
Если хотите поставить Node.JS на Винду, то:
Бесплатные хостинги для Node.JS:
- Heroku — Экспериментальная поддержка Node.js
- Переход Node.js под крыло Joyent
- Хостинг Node.js на Joyent
Один вопрос остался неосвещенным, а именно: какую же СУБД выбрать под это дело? Ответ очевиден – любую из NoSQL, либо MySQL, переделанную под NoSQL.
Если, уважаемый читатель, тебе до сих пор не понятно, что такое Node.JS, можно попробовать прочитать ещё и эту заметку.