nodeJS Быстрый веб-сервер на javascript движке V8

10Фев/1110

Вышла node.js версии 0.4

Основные отличия от ветки 0.2:

  • Полностью переработанный модуль TLS/SSL. Ранее биндинги к коду OpenSSL плотно переплетались с кодом сокетов. Сейчас всё переработано чтобы представлять защищённое соединение как пару "потоков": двусторонний поток защищенных данных и двусторонний открытый поток. Зашифрованный поток передаётся в TCP сокет с помощью стандартного Stream.prototype.pipe().
  • Выделение буферов стало быстрее. Node использует буферы во многих ситуациях. Было замечено что выделение новых буферов работало довольно медленно и сборка мусора в них была сложной. Теперь буферы это чистые объекты javascript вместо ObjectWrap - это положительно сказалось на производительности.
  • Теперь, когда у нас уже есть некоторый опыт, код загрузки модулей был модифицирован для лучшей поддержки менеджеров пакетов. В частности, NPM приходилось пользоваться глубокими симлинками и "подставными" модулями чтобы обойти недостающие фичи в работе require(). Основные изменения:
    1. require() теперь использует realpath. Т.е., теперь эта функция может следовать по символическим ссылкам. Теперь модули с символическими ссылками могут делать require() используя относительные пути.
    2. require() теперь понимает формат package.json. В соответствии с ним теперь определяется главный скрипт модуля. Это позволяет использовать require прямо с директорией модуля.
    3. Директория node_modules просматривается внутри текущей в поисках подключаемых модулей. Будем надеяться что это поможет программистам лучше структурировать свои модули не полагаясь на глобальное пространство имён.
  • Начата работа над нативной сборкой под MinGW. Инструкции по сборке можно найти в вики.
  • Версия V8 обновлена до последней, v3.1.2. Сюда также входят многие возможности вроде новой инфраструктуры компиляции и плагин GDB для Linux. Подробности можно узнать в логе изменений V8.
  • В node был добавлен встроенный клиент для отладчика V8. Он пока довольно примитивный, но вполне подходит для несложных задач. Уже есть небольшое вступительное видео (на английском) и документация.
  • Райаном Уайтом добавлен модуль os, предоставляющий доступ к полезной информации о системе: os.cpus(), os.freemem, os.totalmem, os.loadavg
  • И, само собой, исправления ошибок. Полную информацию можно найти в официальном Changelog

Скачать новую версию можно здесь.

Метки записи: , 10 Комментарии
9Фев/112

Node.js под большим трафиком

Топик с "числом Бумбурума", хоть и привёл к моему бану на Хабре, позволил на несколько часов подставить реальный сайт на Express под большой трафик. Результат интересный: сайт один раз упал, выдав ошибку открытия файла, но после перезапуска node работал нормально. Трафик за пару часов составил около 27000 просмотров, с очень быстрым ростом (выход топика на главную). К сожалению трафик по из Google Analytics получить похоже нельзя, было бы более наглядно.

1Фев/110

Новый спайдер на основе htmlparser + soupselect

На досуге набросал новый спайдер для очередного микропроекта. В этот раз я решил не использовать jsdom (как в нескольких предыдущих), а остановиться на связке htmlparser + soupselect. Страница сначала отдаётся парсеру, а поиск по полученному DOM делается с помощью SoupSelect.

Метки записи: , , Читать полностью
28Дек/100

Сервер разработки на основе Gitosis

Если Вы пользовались Joyent или Heroku, Вам должен быть знаком способ которым они делают связку хостинга и git: Вы делаете git push нужной ветки и сервер запускает этот код. Я решил сделать то же самое на своём маленьком сервере.

Основные требования к серверу были такими:

  • Использование git. Я конечно знаю SVN и CVS, но git для меня гораздо удобнее.
  • Автоматический рестарт Ноды с нужным скриптом при git push
  • Авторизация по открытому ключу, чтобы не вводить логины-пароли, и чтобы никто кроме меня не мог делать push на мой сервер
  • Возможность выполнять скрипты после получения кода но до перезапуска Node - например, чтобы вызывать JSLint
5Окт/105

Хостинг Node.js на Joyent

Ещё полгода назад хостинг на Node.js был чем то из области фантастики. Если Вы хотели пользоваться Node, лучшее что Вам могли предложить — виртуальный сервер с возможностью установки софта. Теперь же Node-хостинг набирает обороты. Вовсю идёт бета-тестирование платформы Heroku, что то готовят товарищи из Elusive Hippo (правда последнее время там что то неспокойно). Теперь же вслед за Heroku о создании Node-хостинга объявил Joyent.

Как и в случае Heroku, хостинг этот пока экспериментальный и доступ к нему ограничен. Чтобы создать сервер на платформе Joyent надо ввести специальный код купона, который можно получить сделав запрос к RESTful API. Ещё одно важное отличие от Heroku: Вам предоставляется полноценный сервер, и node-приложение доступно из Интернета напрямую, а значит - там работают вебсокеты и сервисы на портах отличных от стандартного.

22Сен/109

jQuery + node.js: потрошим страницы на сервере

Node.js уже довольно неплохо зарекомендовала себя как средство создания веб-пауков и всяческих грабберов контента. Но кроме простого получения и разбора HTML серверный JavaScript позволяет нам делать нечто большее: работать со страницей на сервере с помощью jQuery.

Метки записи: , Читать полностью
17Авг/102

Хранилища данных в Node.js: Redis

Последний раз я серьёзно заинтересовался Redis после посещения DevConf 2010 — там был очень интересный доклад о возможностях и применении этой системы. Теперь, когда API Ноды несколько устаканилось и коннекторы пришли в более-менее стабильный вид, можно поэкспериментировать и с Redis, помимо прочих хранилищ :)

Метки записи: , Читать полностью
21Июн/101

Использование нескольких ядер/процессоров в Node.js: порождаем воркеры

Рабочие на фабрике в КитаеОдно из слабых мест Node.js — однопоточное выполнение кода. С этой проблемой можно бороться по разному: например, ставя load balancer'ы и запуская несколько экземпляров сервера. Но с версией 0.1.98 появился и новый способ: передача файлового дескриптора.

Метки записи: , Читать полностью
15Июн/1014

Socket.IO и Node.js: пробное использование

Я давно хотел попробовать поиграться с библиотекой Socket.IO. Она предоставляет API, которое позволяет клиенту и серверу общаться, используя различные технологии:

  • WebSocket
  • Adobe Flash Socket
  • ActiveX HTMLFile (IE)
  • Server-Sent Events (Opera)
  • XHR с multipart encoding
  • XHR с long-polling

Причём технология выбирается совершенно прозрачно и для клиента, и для сервера. Если браузер поддерживает WebSockets, будут использоваться именно они. Для других браузеров будет обеспечен fallback до флешовых сокетов, а если и этих нет — до обычного XHR с long polling. Плюс над всем этим великолепием сделан удобный API для клиента и сервер для Node.js (впрочем, думаю сервер тут можно реализовать на любом языке).

11Июн/103

Хранилища данных в Node.js: MySQL через DBSlayer

Хотя Node отлично справляется с большим количеством одновременных запросов и висящих соединений, для больших сервисов иногда имеет смысл не переписывать всё на Node, а перенести на неё только критичные части кода: в частности, все связанное с Comet и асинхронной доставкой контента. Сегодня я покопаюсь в DBSlayer и псмотрю как можно ускорить с помощью Node обычный сайт на Drupal.

DBSlayer был создан в недрах New York Times как средство абстракции и балансирования нагрузки на БД. Подробнее можно почитать на сайте NYTimes. DBSlayer предоставляет API на основе JSON. Т.к. нативного драйвера для MySQL нет, для доступа к MySQL-серверам из Node используется именно этот сервер.