Skip to content

Ставим Node.js в Windows

20/12/2009

Фото: Jeff Wilcox

Последнее время я интересуюсь 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 будет намного медленнее, но мне интересны конкретные цифры.

Ссылки по теме

Advertisements
7 комментариев
  1. Очень интересная эта штука, nodejs. Только что тоже установил, так же, под виртуалкой, все работает.
    Радости полные штаны 🙂
    Позже буду пробовать подключить мутулзовский сервер-сайдовый фреймворк.

    • Я underscore.js и nerve в качестве фреймворка юзаю. MooTools вот не пробовал 🙂

      • Глянул по-быстрому, underscore это тоже такое расширение функциональности, как я понял, это как mootools почти, а вот nerve, уже полее высокоуровневая вещь, на которой можно и приложение сделать. Посмотрю ее.

        Я, кстати, поставил mootools под nerve с небольшими хаками. Получилось классно 🙂

Trackbacks & Pingbacks

  1. Ставим Node.js в Windows « nodeJS
  2. Использование nginx вместе с Node.js « Механический мир
  3. Использование nginx вместе с Node.js « nodeJS
  4. Знакомьтесь: Node.JS « Девятый бит

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: