windows azure & nodejs microsoft swit 2012
DESCRIPTION
TRANSCRIPT
![Page 1: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/1.jpg)
@dmytromindra #msswit
WEB В РЕАЛЬНОМ ВРЕМЕНИ С WINDOWS AZURE И NODE.JS
Дмитрий Миндра, Lohika
![Page 2: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/2.jpg)
@dmytromindra #msswit
Для кого этот доклад?
Вам нравится JavaScript
Вы хотите чего-то нового!
Вам нравится Web
![Page 3: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/3.jpg)
@dmytromindra #msswit
Мустафин Дмитрий
RnD Team Lead
Microsoft Technologies Lab Member
![Page 4: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/4.jpg)
@dmytromindra #msswit
Нечто
Великолепное ПО
![Page 5: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/5.jpg)
@dmytromindra #msswit
Посторонись, пресловутый PHP! Долой Java! Старичок Perl, тебе так вообще давно пора на
пенсию. И как же вы уже достали, попсовые Ruby и
Python!
(c) xakep
http://www.xakep.ru/post/53583/
![Page 6: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/6.jpg)
@dmytromindra #msswit
МыЖдемПеремен
!
![Page 7: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/7.jpg)
@dmytromindra #msswit
![Page 8: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/8.jpg)
@dmytromindra #msswit
Node.js&
23 июня 2011
![Page 9: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/9.jpg)
@dmytromindra #msswit
var http = require('http');
http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
HELLO WORLD
![Page 10: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/10.jpg)
@dmytromindra #msswit
ПОЧЕМУ NODE.JS?
Цель Node.JS - обеспечение простого способа создания масштабируемых сетевых программ.
Event Driven
Все асинхронно
Работает на Google V8Официально поддерживается компанией MicrosoftХорошо параллелится (при работе с вводом/выводом)
![Page 11: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/11.jpg)
@dmytromindra #msswit
АСИНХРОННОСТЬ
Пока выполняется операция, которую надо ждать, Node.JS занимается полезным делом.
![Page 12: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/12.jpg)
@dmytromindra #msswit
СЛАБЫЕ СТОРОНЫ
У Node.JS есть слабые стороны, о которых надо помнить.
Плохо справляется с тяжелыми вычислительными задачами
Использует только одно ядро процессора (есть утилита Cluster)
![Page 13: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/13.jpg)
@dmytromindra #msswit
Спагетти кодvar fs = require('fs') , path = require('path') , file1 = "file1.txt“ , file2 = "file2.txt";
// Check if file1 exists, write to file2, // then display new file2 contents. path.exists(file1, function (exists) { if (!exists) throw new Error("No file!"); fs.readFile(file1, function (err, data) { if (err) throw err; fs.writeFile(file2, data, function (err) { if (err) throw err; fs.readFile(file2, function (err, data) { if (err) throw err; console.log(data.toString()); ... }); }); }); });
![Page 14: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/14.jpg)
@dmytromindra #msswit
ХОРОШИЙ ИНСТРУМЕНТ
Для подходящей задачи.
Важно уметь отличить подходящую задачу от неподходящей.
![Page 15: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/15.jpg)
@dmytromindra #msswit
Есть ли у нас план?
1. Привет Node!2. Web Проект3. SPA4. Windows Azure5. Socket.IO
![Page 16: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/16.jpg)
@dmytromindra #msswit
ПЕРВЫЕ ШАГИПора делать
![Page 17: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/17.jpg)
@dmytromindra #msswit
Node Package Manager
Управляет установкой модулей, например
npm install azure
npm install –g express
![Page 18: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/18.jpg)
@dmytromindra #msswit
WEB ПРИЛОЖЕНИЯРазработка первого
![Page 19: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/19.jpg)
@dmytromindra #msswit
Что в меню ?
JavaScript везде. И на сервере, и на клиенте. Некоторые библиотеки используются одновременно и на сервере и на клиенте.
Express (сервер)Jade (сервер)Mustache (сервер , клиент)Sammy.js (клиент)jQuery (клиент)
![Page 20: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/20.jpg)
@dmytromindra #msswit
ПРОСТОЕ WEB ПРИЛОЖЕНИЕ
Постараемся построить простое веб приложение при помощи Express, Jade и пары заготовок.
![Page 21: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/21.jpg)
@dmytromindra #msswit
SPA* – приложение-страница
Приложение, состоящее из одной веб страницы и обилия скриптов.
Асинхронно общается с сервером.Не перегружается.
*http://en.wikipedia.org/wiki/Single_Page_Application
![Page 22: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/22.jpg)
@dmytromindra #msswit
WINDOWS AZUREИнтеграция с
![Page 23: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/23.jpg)
@dmytromindra #msswit
ПРИСТУПАЕМ К РАБОТЕ
Мы кратко расскажем как: создать новое Windows Azure Node.js приложение
используя инструменты Windows PowerShell
запустить Node приложение локально, используя Windows Azure compute emulator
опубликовать ваше приложение а Windows Azure
Дополнительная информация:
https://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/https://www.windowsazure.com/en-us/develop/nodejs/tutorials/web-app-with-storage/
![Page 24: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/24.jpg)
@dmytromindra #msswit
ЕСЛИ КОРОТКО, ТОВыполните команду
npm install azure
В файле «c:\node\tasklist\WebRole1\Web.cloud.config» замените тестовые данные на данные вашей учетной записи Azure.
Вы найдете много полезной информации в файле:«C:\node\tasklist\WebRole1\node_modules\azure\README.md»
Создайте новую переменную в вашем JavaScript файле:var azure = require('azure');
Все готово! Поехали !
![Page 25: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/25.jpg)
@dmytromindra #msswit
СЕРВИС ТАБЛИЦСоздаем сервис: var tableService = azure.createTableService();
Назначаем имя таблице: var myTableName = “MyTable”;
Создаем таблицу:tableService.createTableIfNotExists(myTableName, OnCreatedFunc);
Где OnCreatedFunc является функцией, которая выполнится после создания таблицы (Callback)function OnCreatedFunc(errorObject, createdBoolFlag) {…}
Больше информации по адресу:http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/table-services/
![Page 26: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/26.jpg)
@dmytromindra #msswit
ДОБАВЛЯЕМ ЗАПИСЬ В ТАБЛИЦУ
Таблица Azure является контейнером для любого объекта. “PK” является комбинацией Partition и Row ключей.
Объявляем объект: var myObj = { PartitionKey: “MyPartition“, RowKey: “myRowKey“, myProp1: “Dima+", myProp2: “Luba=“, myProp3: “Misha”};
Добавляем объект в таблицу:tableService.insertEntity(
myTableName, myObj, OnMyObjInserted);
Где функция OnMyObjInserted является callback-омfunction OnMyObjInserted(error, serverEntity) {…}
![Page 27: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/27.jpg)
@dmytromindra #msswit
ОБНОВЛЯЕМ ЗАПИСЬОбъявляем объект с обновленными данными:var myObjUpd = { PartitionKey: “MyPartition“, RowKey: “myRowKey", myProp1: “Dima+", myProp2: “Luba=”, myProp3: “Misha and Margo" };
Обновляем существующую сущность: tableService.updateEntity( myTableName, myObjUpd, OnMyObjUpdated);Функция OnMyObjUpdated – это, как всегда, callback:function OnMyObjUpdated(error, serverEntity) {…}
Подводный камень: вы должны заполнить все поля своего объекта, либо воспользоваться объектом ServerEntity и изменить только необходимые поля!
![Page 28: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/28.jpg)
@dmytromindra #msswit
ЗАПРАШИВАЕМ ЗАПИСЬОдиночный объект:tableService.queryEntity(myTableName, myPartition, myRowKey, OnEntityQueried);
callback:function OnEntityQueried(error, serverEntity) {…}
Набор объектов:var query = azure.TableQuery.select().from(myTableName)
.where(“PartitionKey eq ?”, “MyPartition”);tableService.queryEntities(query, OnEntitiesQueried);
сallback:function OnEntitiesQueried(error, serverEntities) {…}
![Page 29: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/29.jpg)
@dmytromindra #msswit
КАК НАСЧЕТ BLOB?Все работает точно так же, как и в таблицах:
var azure = require('azure');var blobService = azure.createBlobService();blobService.createContainerIfNotExists(…);blobService.createBlockBlobFromStream(…);blobService.listBlobs(…);blobService.getBlobToStream(…);blobService.deleteBlob(…);
Подробнееhttp://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/blob-storage/
![Page 30: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/30.jpg)
@dmytromindra #msswit
SOCKET.IOWEB в реальном времени
![Page 31: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/31.jpg)
@dmytromindra #msswit
WebSockets
Постоянное подключение к серверу.
Часть стандарта HTML5
Предназначен для построения Real-Time приложений.
![Page 32: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/32.jpg)
@dmytromindra #msswit
Что такое SOCKET.IO?
Больше, чем просто WebSockets.
Имеет альтернативные виды транспорта.
Поставляется с клиентской библиотектой.
Виды транспорта:WebSocketFlash SocketAJAX long-pollingAJAX multipart streamingIFrameJSONP polling
![Page 33: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/33.jpg)
@dmytromindra #msswit
Время действовать
Напишем приложение, работающее в реальном времени.
В нашем случае этим приложением будет обмен мгновенными сообщениями.
![Page 34: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/34.jpg)
@dmytromindra #msswit
В ЗАКЛЮЧЕНИЕПодводим итоги
![Page 35: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/35.jpg)
@dmytromindra #msswit
1. JavaScript невероятно популярен. На рынке много программистов.
2. JavaScript будет единым языком и на сервере и на клиенте. Никакого дублирования кода.
3. Асинхронная событийная модель.
Мои аргументы:
![Page 36: Windows Azure & NodeJS Microsoft SWIT 2012](https://reader033.vdocuments.site/reader033/viewer/2022051413/553acbe84a7959f87e8b45e8/html5/thumbnails/36.jpg)
@dmytromindra #msswit
Внеклассное чтение
Как убедить босса?http://nodeguide.com/convincing_the_boss.html
Выбор правильного стиляhttp://stackoverflow.com/questions/5495984/coding-style-guide-for-node-js-apps
Что такое Node?http://stackoverflow.com/questions/1884724/what-is-node-js