7. One lang to rule them all
http://www.flickr.com/photos/alessandrocarrozzo/442563751/
9. NodeJS
●
Первая реализация серверного JavaScript,
которой хочется пользоваться
●
Событийный ввод/вывод для Google V8
http://nodejs.org/
http://github.com/ry/node
10. Наивный ввод-вывод
10 PRINT 'Как вас зовут?'
20 INPUT name
30 PRINT 'Привет, ', name, '!'
40 END
11. Неблокирующий ввод-вывод
print('Как вас зовут?');
input(function (name) {
print('Привет, ' + name + '!');
});
// Мы можем продолжать выполнение,
// не дожидаясь ответа.
12. NodeJS: зачем?
●
Серверные приложения должны быть
производительными
● Один процессорный поток на соединение —
это неоптимально
● Затраты на обработку и переключение потоков
●
Смена контекстов дорога (стек выполнения, кеш
процессора)
● Thread safety
● Решение — один поток с циклом событий
13. Событийный эхо-сервер
var net = require("net");
function handle(socket) {
socket.on("data", function (data) {
socket.write(data);
});
socket.on("end", function () {
socket.end();
});
};
var server = net.createServer(handle);
server.listen(7777, "127.0.0.1");
14. NodeJS: что внутри?
● Двоичные буферы и потоки ввода-вывода
● События и таймеры
● Файловая система и процессы
● Сеть, сокеты, DNS, UDP, HTTP, query string
● Криптография
● Запуск скриптов в управляемой среде
● Assert, юнит-тестирование
● REPL
16. CouchDB
● Не просто NoSQL «DB»
●
Документо-ориентированная БД
● JSON, схемы данных нет
●
RESTful HTTP API
●
Нет SQL, нет JOIN
● Реализация Map/Reduce на JavaScript
●
Встроенная веб-консоль управления Futon
http://couchdb.apache.org/
22. NodeJS: масштабирование
●
Масштабирование — это сложная штука
●
Многопроцессорные системы: запустите
больше процессов
●
Разделите сокет между процессами.
Балансировщик — ядро ОС
●
Используйте традиционные средства IPC
●
WebWorkers
● Масштабирование вниз: Palm webOS
23. NodeJS: рецепты
●
Многопользовательские приложения
●
Онлайновые игры
●
Низкоуровневая работа с запросами
●
Обработка больших файлов
● Потоковая генерация и скачивание
● Создание mash-ups