The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

07.02.2015 09:30  Выпуск серверной JavaScript-платформы Node.js 0.12

Спустя почти два года с момента появления прошлой стабильной ветки представлен значительный релиз платформы для выполнения высокопроизводительных сетевых приложений на языке JavaScript - Node.js 0.12. Затягивание разработки ветки 0.12 и излишний контроль над проектом со стороны компании Joyent привёл к расколу в стане разработчиков и основанию форка io.js. Первый выпуск io.js 1.0 во многом идентичен Node.js 0.12 и отличается использованием более свежей версией JavaScript-движка V8 и организационными изменениями, такими как переход к более короткому циклу подготовки релизов и более интенсивному продвижению новшеств. Node.js является более консервативным проектом, в котором приоритетным является обеспечение стабильности кодовой базы.

Наиболее заметные новшества, добавленные в Node.js 0.12:

  • Переход на версию JavaScript-движка V8 3.26, выпущенную в августе 2014 г. (в Node.js 0.10 использовался V8 3.14, выпущенный в 2012 году, а в io.js - V8 3.31.71, выпущенный в конце декабря 2014 г.).
  • Модуль Streams 3 с улучшенной реализацией потоков при сохранении обратной совместимости на уровне API. Из улучшений в Streams можно отметить поддержку механизмов cork и uncork для предотвращения сброса буферов при выполнении операций пакетной записи порции данных. Пакетный режим обеспечивается за счёт логического объединения в очередь передаваемых на запись данных с их последующей единовременной отправкой через системные вызовы write() и writev();
  • В модуле HTTP снято ограничение на число одновременно создаваемых сетевых сокетов (раньше значение maxSockets было равно 5, а теперь не ограничивается и упирается в лимиты, выставленные на стороне операционной системы). Реализована корректная поддержка KeepAlive, что позволяет держать сокеты отрытыми до истечения таймаута или закрытия соединения на другом конце. Добавлена поддержка явного сброса заголовков (flushHeaders), что позволяет исключить передачу дополнительных данных перед отправкой первого байта контента и поддержать проксированные соединения открытыми;
  • В модуле Cluster реализован и задействован новый режим балансировки запросов, работающий с использованием метода кругового перебора (Round Robin) при котором основной сервер принимает соединения и равномерно распределяет их среди обработчиков. Опциональная возможность использования старого метода, при котором приём соединений осуществлялся на стороне обработчиков, сохранена;
  • Модуль TLS переведён на новый механизм TLSWrap, который упрощает обращение из JavaScript к коду TLS на C++. Добавлены новые API для асинхронных callback-вызовов SNI, сшивания OCSP и обработки событий от хранилища;
  • В модуле Buffer задействован механизм более точного выделения памяти для буферов, который позволяет снизить накладные расходы при выделении множества мелких буферов, как с позиции потребления памяти, так и с точки зрения нагрузки на CPU (сборщик мусора выполняется быстрее). Добавлены новые методы, такие как buf.writeUIntLE, Buffer.compare() и buffer.equals(), представлен конструктор "new Buffer(otherBuffer)".
  • В средства управления дочерними процессами (child_process) добавлена поддержка вызовов spawnSync/execSync для запуска дочерних процессов в синхронном режиме (до завершения дочернего процесса работа основного потока будет приостановлена);
  • В модуль Crypto добавлен API для загрузки собственных движков шифрования, для их использования в OpenSSL. Обеспечена возможность шифрования ключей паролем и расширен API для получения паролей. Добавлен API для шифрования по открытым ключам RSA;
  • Модуль VM теперь является надстройкой над модулем Contextify, который используется для обеспечения доступа к данным из sandbox-окружения;
  • Начальная поддержка ECMAScript Internationalization API 1.0 (ECMA-402), которая пока доступна только для английского языка.

Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.

Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8.

По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в Node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.

  1. Главная ссылка к новости (http://blog.nodejs.org/2015/02...)
  2. OpenNews: Выпуск io.js 1.0, форка серверной JavaScript-платформы Node.js
  3. OpenNews: В рамках проекта IO.js началось развитие форка Node.js, независимого от компании Joyent
  4. OpenNews: Выпуск серверной JavaScript-платформы Node.js 0.10
  5. OpenNews: Представлена начальная реализация версии фреймворка node.js для языка C++
  6. OpenNews: Компания Joyent, развивающая Node.js и SmartOS, получила 85 млн долларов инвестиций
Лицензия: CC-BY
Тип: Программы
Ключевые слова: node.js, javascript
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.1, Efrem, 10:53, 07/02/2015 [ответить] [смотреть все]
  • +5 +/
    Конкуренция - двигатель прогресса
     
     
  • 2.39, Олег, 21:50, 07/02/2015 [^] [ответить] [смотреть все] [показать ветку]
  • –4 +/
    Вообще-то, нет Двигатель прогресса это opensource и совместная разработка, а ко... весь текст скрыт [показать] [показать ветку]
     
  • 2.41, Аноним, 09:22, 08/02/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Вместо того чтоб делать один хороший node js теперь будет 2 плохих Зато конкуре... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.42, Efrem, 20:50, 08/02/2015 [^] [ответить] [смотреть все]  
  • +/
    Ну время покажет насколько они хороши А так если сравнивать с моделью выпуска р... весь текст скрыт [показать]
     
  • 1.2, Аноним, 11:06, 07/02/2015 [ответить] [смотреть все]  
  • +/
    Вообще то там есть есть Sync функции, например, fs fileReadSync Но они не реком... весь текст скрыт [показать]
     
  • 1.15, Greed, 12:42, 07/02/2015 [ответить] [смотреть все]  
  • +2 +/
    Думаю что конкуренция между io.js и node.js пойдет на пользу... Пойду новые плюшки изучать :)
     
  • 1.17, Аноним, 13:40, 07/02/2015 [ответить] [смотреть все]  
  • –1 +/
    Совместимость поломали?
     
  • 1.22, manster, 14:35, 07/02/2015 [ответить] [смотреть все]  
  • +/
    ../src/node_crypto.h:42:24: fatal error: openssl/ec.h: No such file or directory
     
     
  • 2.26, casm, 16:28, 07/02/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    у меня нормально собралось, openssl devel проверьте
     
     
  • 3.44, manster, 15:32, 12/02/2015 [^] [ответить] [смотреть все]  
  • +/
    скорее всего нужно размаскировать в портаже openssl Чего не хотелось бы ... весь текст скрыт [показать]
     
  • 2.29, Аноним, 16:43, 07/02/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Ноду нужно брать из NPM. Все остальное от лукавого.
     
     
  • 3.33, Crazy Alex, 17:27, 07/02/2015 [^] [ответить] [смотреть все]  
  • –2 +/
    Ноду как и всё остальное надо брать из репозиториев Хотя бы неофициальных, ес... весь текст скрыт [показать]
     
  • 1.35, Ящ, 17:57, 07/02/2015 [ответить] [смотреть все]  
  • +2 +/
    Ненужное ненужно, но хорошо, что оно есть, ибо оттягивает на себя всякий неадекват.
     
     
  • 2.37, Аноним, 18:32, 07/02/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Эк вы самокритично то.
     
     
  • 3.38, A.Stahl, 20:30, 07/02/2015 [^] [ответить] [смотреть все]  
  • –2 +/
    Что, "то"? Что там такое самокритичное?
     
  • 1.40, Ilya Indigo, 04:22, 08/02/2015 [ответить] [смотреть все]  
  • +1 +/
    После io.js зашевелились.
     
  • 1.43, Аноним, 19:46, 09/02/2015 [ответить] [смотреть все]  
  • +1 +/
    Слоупоки В io js V8 4 1 0 14 io js 1 1 0 2015-02-03 8212 V8 4 1 0 14 io j... весь текст скрыт [показать]
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor