Ставим Node.js в Windows
Последнее время я интересуюсь node.js – веб-сервером с асинхронным вводом/выводом, построенным вокруг Гугловского JavaScript-движка V8. И вот сегодня наконец решил поставить.
Node.js
Немного о самом сервере. Скрипты пишутся, понятное дело, на Javascript, который V8 компилирует чуть ли не в машинный код. Скорость просто отличная, близка к C++, по некоторым замерам даже иногда её превосходит.
Одна из основных “фишек” Node.js – асинхронный ввод-вывод. То есть, запрашивая длительную по меркам ЦП операцию (чтение с диска, из сети, обращение к базе данных) скрипт не ждёт её завершения а просто оставляет callback. По завершению этой операции callback выполняется. Такой подход позволяет строить веб-приложения с очень низким временем отклика, позволяющие держать одновременно по 10-12 тысяч подключений.
К сожалению, Node.js пока работает только на *nix-системах (UPD: начиная с версии 0.1.97 есть cygwin-порт, начиная с версии 0.4.0 основную ветку node можно собрать под cygwin без портирования). Небольшое копание в коде показывает нам что в основном это происходит из-за использования pthread_atfork. По крайней мере я пока не слышал ни об одном успешном запуске под Windows. Поэтому ставить будем в виртуальную машину
Установка
Для начала нам потребуется система. Ставить Linux с нуля мне было лень, поэтому я взял готовый образ c Thoughtpolice. Мой выбор пал на Debian Lenny, т.к. последний Linux с которым я работал был Ubuntu, но образы Ubuntu Server на этом сайте уж очень большие, на мой вкус.
Сначала надо добавить в систему нужные репозитории. На скачанном образе нет даже gcc. Добавляем в /etc/apt/sources.list строку:
http://ftp.us.debian.org/debian main contrib non-free
Делаем apt-get update. Apt обновит список софта. Ставим Python:
apt-get install python
Ещё нам потребуются gcc, g++ и make:
apt-get install gcc apt-get install g++ apt-get install make
Для стресс-тестов может понадобиться ab (Apache Benchmark), входящий в apache2-utils:
apt-get apache2-utils
Теперь мы готовы к установке node.js. Скачиваем архив:
wget http://nodejs.org/dist/node-v0.4.4.tar.gz
Распаковываем:
tar -xvzf node-v0.1.21.tar.gz
Идём в папку node-v0.1.21 и устанавливаем Node:
./configure make make install
Если все зависимости удовлетворены, Node должна собраться без проблем. Запускаем:
node
Если всё в порядке, мы должны увидеть интерактивную консоль, выйти из которой можно набрав process.exit().
Hello, World!
Теперь нам нужен скрипт, на котором мы проверим работу сервера. Можно взять стандартный Hello World с сайта nodejs.org:
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello World\n");
}).listen(8000);
console.log("Server running at http://127.0.0.1:8000/");
Я ещё добавил заголовок 'Content-Length':12 (длина ответа без заголовков)
response.writeHead(200, {"Content-Type": "text/plain", 'Content-Length':12});
Сохраняем это в файл server.js (я просто набрал в vim), и запускаем:
node server.js
Всё, сервер запущен.
Подключение к серверу
К серверу можно подключиться по адресу http://127.0.0.1:8000/ (с той же машины) и получить Hello World. Но для разработки было бы удобнее подключаться нормальным браузером с основной машины. По умолчанию VMWare Player соединяет виртуальную и реальную машины в подсеть за NAT’ом. Это значит что соединиться с виртуальным Линуксом сможем только мы, остальная сеть его просто не увидит. Впрочем, этого достаточно.
Чтобы узнать адрес виртуальной машины, выполняем в ней команду:
/sbin/ifconfig eth0
Ifconfig выдаст много разных данных, среди которых (на второй строчке) будет и нужный нам inet addr. Теперь просто вводим этот адрес в браузер на основной машине. Не забудьте порт – по умолчанию тестовые скрипты Node вешаются на порт 8000.
Чтобы работать было удобнее, можно настроить общие папки – сделать некоторые папки основной машины доступными в виртуальной. Для этого идём в меню VMWare Player’а: VM > Settings > Options > Shared Folders. Выставляем справа Folder Sharing в “Always Enabled” и добавляем нужные папки. В виртуальной машине они будут доступны в /mnt/hgfs.
Ещё одна вещь которая мне понадобилась: подключение по ssh. В консоль VMWave Player’а неудобно переключаться и особенно вставлять туда текст, поэтому к виртуальной машине я подключаюсь с помощью Putty. Для этого надо установить пакет openssh-server:
apt-get install openssh-server
Debian сам установит нужные пакеты, сконфигурирует и перезапустит ssh-демон, так что подключаться можно будет сразу после установки.
Завтра пожалуй я соберу и запущу там скрипт посложнее. Также очень хочется сравнить производительность Node и Rhino. Понятно что Rhino будет намного медленнее, но мне интересны конкретные цифры.

Очень интересная эта штука, nodejs. Только что тоже установил, так же, под виртуалкой, все работает.
Радости полные штаны
Позже буду пробовать подключить мутулзовский сервер-сайдовый фреймворк.
Я underscore.js и nerve в качестве фреймворка юзаю. MooTools вот не пробовал
Глянул по-быстрому, underscore это тоже такое расширение функциональности, как я понял, это как mootools почти, а вот nerve, уже полее высокоуровневая вещь, на которой можно и приложение сделать. Посмотрю ее.
Я, кстати, поставил mootools под nerve с небольшими хаками. Получилось классно