Node.js (RichClient)
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Node.js (RichClient)

on

  • 3,252 views

 

Statistics

Views

Total Views
3,252
Views on SlideShare
3,062
Embed Views
190

Actions

Likes
3
Downloads
16
Comments
0

3 Embeds 190

http://kuroikaze85.wordpress.com 172
http://www.slideshare.net 11
https://twimg0-a.akamaihd.net 7

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Node.js (RichClient) Presentation Transcript

  • 1. Node.js Асинхронный веб сервер с неблокирующим I/O
  • 2. Что такое Node.js 1) V8 - компилируемый JavaScript движок от Google 2) Event-loop c неблокирующим вводом/выводом 3) Модульная система CommonJS
  • 3. Философия Основная философия Node.js - асинхронное выполнение. Скрипты в Node не дожидаются завершения длительных операций, они оставляют callback, который будет выполнен позже. При этом возврат в цикл обработки событий происходит как можно скорее. 
  • 4. Блокировка программы при обращении к диску / сети RAM: ~80 наносекунд HDD: ~130 000 наносекунд Сеть: ~500 000 наносекунд Это время можно было бы использовать с большей эффективностью
  • 5. Асинхронный Ввод/Вывод (nonblocking I/O) 1) Как мы привыкли писать код на сервере: $result = $db->query(' ... '); // Запрос или, как бы  это выглядело на JS: var result = db.query(' ... '); // Запрос - Что происходит пока выполняется запрос к БД? Приложение простаивает -
  • 6. Асинхронный Ввод/Вывод (nonblocking I/O) 2) Как мы пишем  асинхронный код : db.query(' ... ', function(result) {  // Запрос      // Обработчик }); - Что происходит пока выполняется запрос к БД? Приложение обслуживает следующего пользователя -
  • 7. Современные вэб сервера используют многопоточность, Но разве это лучший подход? Давайте сравним Apache и Nginx
  • 8. Apache использует многопоточность, Проблема в том, что при увеличении числа пользователей, потоков становится слишком много.
  • 9. Переключение между потоками - ресурсоёмкая операция. Каждый поток потребляет оперативную память. Node.js также как и Nginx использует event-loop c неблокирующим вводом выводом. Пользователи обслуживаются по очереди в порядке поступления, однако, например если пользователю нужно обратиться к диску, то пока производится чтение с диска, обслуживается следующий пользователь. Event-loop
  • 10. Event-loop Таким образом приложение не простаивает, и обслуживает пользователей максимально эффективно!
  • 11. Почему JavaScript? Node.js - не первый проект призванный облегчить написание неболкирующих приложений, для Python есть Twisted и Tornado, для Ruby есть EventMachine Но событийно управляемый ввод/вывод является достаточно фундаментальным сдвигом, который требует глубокой интеграции с языком программирования.  Javascript - событийно-управляемый язык, так как своими корнями уходит в браузер.
  • 12. Почему JavaScript? Кроме того, JavaScript очень гибкий язык, пример сервера с помощью (fab)
  • 13. Система событий Стандартные библиотеки принимают callback в качестве параметра, и передают ему два аргумента, error и data. Это простая и прозрачная структура, однако она может быть изменена сторонними библиотеками.
  • 14. Система событий Так-же вы можете использовать Promises: var file = fs. open ( 'file' ) ; file. addCallback ( function ( data ){ // Сделать что нибудь с данными }) ;   file. addErrback ( 'error' , function ( error ){ // Если пришла ошибка, тоже что нибудь сделать }) ; Просто подключив модуль node_promise
  • 15. Система модулей 1) Система модулей создана по стандарту CommonJS      (Многие CommonJS модули можно использовать в Node) 2) Кеширование модулей      (один и тот же код дважды не компилируется) 3) Модули не привязаны к языку на котором они написаны      (Модуль написанный на С/С++ подключается так-же как и JS модуль)
  • 16. Внутренние модули Пример подключения: var module_name = require('module_name'); Физически модуль может находиться по одному из следующих адресов: /home/user/.node_libraries/ /home/user/.node_libraries/module_name /usr/local/lib/node/libraries/ /usr/local/lib/node/libraries/module_name
  • 17. Внешние модули Пример подключения: var module_name = require('./module_name'); //Указан абсолютный или относительный путь к модулю Физически модуль может находиться по одному из следующих адресов: ./ ./module_name
  • 18. Модули на С++ Компилируются в бинарный файл с расширением .node, и подключаются как обычные внутренние или внешние модули. Так как из С++ API V8 доступны практически все возможности JavaScript почти любой модуль модет быть в последствии переписан на С++ Это  позволяет сначала писать весь проект на JavaScript, a потом при необходимости переписывать узкие места на С++.
  • 19. Пример успешного использования Node.JS Plurk: более 200 000 одновременных соединений 1 сервер 8 экземпляров Node 32 гб памяти
  • 20. Системы пакетов: Не смотря на молодость проекта, для него уже есть более 150 разных модулей (список:  http://wiki.github.com/ry/node/modules ) Поэтому появилось несколько менеджеров пакетов, позволяющих не заботиться о связях и обновлении установленных модулей, самые популярные из них:   - kiwi   - seed   - npm   - mode
  • 21. “ two languages will never go away, C and JavaScript. ”  - Ryan Dahl (создатель nodeJS) Спасибо за внимание!