SlideShare a Scribd company logo
Дмитрий Миндра, Lohika

      WEB В РЕАЛЬНОМ ВРЕМЕНИ С
      WINDOWS AZURE И NODE.JS
http://www.slideshare.net/dmytromindra   @dmytromindra #msugodua
Вы замечательные !




                     @dmytromindra #msugodua
Для кого этот доклад?
Вам нравится
JavaScript

Вы хотите чего-то
нового!

Вам нравится Web



                    @dmytromindra #msugodua
Мустафин Дмитрий
RnD Team Lead

Microsoft
Technologies Lab
Member




                   @dmytromindra #msugodua
Нечто




        Великолепное ПО

                    @dmytromindra #msugodua
Посторонись, пресловутый PHP! Долой Java!
Старичок Perl, тебе так вообще давно пора на пенсию.
И как же вы уже достали, попсовые Ruby и Python!

(c) xakep




            http://www.xakep.ru/post/53583/   @dmytromindra #msugodua
Мы
Ждем
Перемен !




            @dmytromindra #msugodua
@dmytromindra #msugodua
&

Node.js



                 23 июня 2011
          @dmytromindra #msugodua
HELLO WORLD
var http = require('http');

http.createServer(function (req, res) {
     res.writeHead(200, {'Content-Type': 'text/plain'});
     res.end('Hello Worldn');
}).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');

                                         @dmytromindra #msugodua
ПОЧЕМУ NODE.JS?
Цель Node.JS -      Event Driven
обеспечение
                    Все асинхронно
простого способа
создания            Работает на Google V8
масштабируемых      Официально поддерживается
сетевых программ.   компанией Microsoft
                    Хорошо параллелится (при работе
                    с вводом/выводом)




                                     @dmytromindra #msugodua
АСИНХРОННОСТЬ
Пока выполняется
операция, которую
надо
ждать, Node.JS
занимается
полезным делом.




                    @dmytromindra #msugodua
СЛАБЫЕ СТОРОНЫ
У Node.JS есть      Плохо справляется с
слабые стороны, о   тяжелыми вычислительными
которых надо        задачами
помнить.
                    Использует только одно ядро
                    процессора (есть утилита
                    Cluster)



                                @dmytromindra #msugodua
Спагетти код
 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());
               ...
           });
        });
    });
 });

                                                                           @dmytromindra #msugodua
ХОРОШИЙ ИНСТРУМЕНТ
Для подходящей
задачи.

Важно уметь
отличить
подходящую
задачу от
неподходящей.


                 @dmytromindra #msugodua
Есть ли у нас план?
1.   Привет Node!
2.   Web Проект
3.   SPA
4.   Windows Azure
5.   Socket.IO




                      @dmytromindra #msugodua
Пора делать

ПЕРВЫЕ ШАГИ




              @dmytromindra #msugodua
Node Package Manager
           Управляет установкой
           модулей, например

           npm install azure

           npm install –g express




                     @dmytromindra #msugodua
Разработка первого

WEB ПРИЛОЖЕНИЯ




                     @dmytromindra #msugodua
Что в меню ?
JavaScript везде. И   Express    (сервер)
на сервере, и на      Jade       (сервер)
клиенте. Некоторые    Mustache   (сервер , клиент)
библиотеки            Sammy.js   (клиент)
используются          jQuery     (клиент)
одновременно и на
сервере и на
клиенте.



                                 @dmytromindra #msugodua
ПРОСТОЕ WEB ПРИЛОЖЕНИЕ
          Постараемся построить простое
          веб приложение при помощи
          Express, Jade и пары заготовок.




                         @dmytromindra #msugodua
SPA* – приложение-страница
             Приложение, состоящее из одной
             веб страницы и обилия скриптов.

             Асинхронно общается с сервером.
             Не перегружается.




             *http://en.wikipedia.org/wiki/Single_Page_Application




                                         @dmytromindra #msugodua
Интеграция с

WINDOWS AZURE




               @dmytromindra #msugodua
ПРИСТУПАЕМ К РАБОТЕ
Мы кратко расскажем как:
 создать новое 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/

                                                                 @dmytromindra #msugodua
ЕСЛИ КОРОТКО, ТО
Выполните команду
npm install azure

В файле «c:nodetasklistWebRole1Web.cloud.config» замените
тестовые данные на данные вашей учетной записи Azure.

Вы найдете много полезной информации в файле:
«C:nodetasklistWebRole1node_modulesazureREADME.md»

Создайте новую переменную в вашем JavaScript файле:
var azure = require('azure');

Все готово! Поехали !
                                                @dmytromindra #msugodua
СЕРВИС ТАБЛИЦ
Создаем сервис:
var tableService = azure.createTableService();

Назначаем имя таблице:
var myTableName = “MyTable”;

Создаем таблицу:
tableService.createTableIfNotExists(myTableName, OnCreatedFu
nc);

Где OnCreatedFunc является функцией, которая выполнится после
создания таблицы (Callback)
function OnCreatedFunc(errorObject, createdBoolFlag) {…}
Больше информации по адресу:
http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/table-services/


                                                                            @dmytromindra #msugodua
ДОБАВЛЯЕМ ЗАПИСЬ В ТАБЛИЦУ
Таблица 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) {…}

                                               @dmytromindra #msugodua
ОБНОВЛЯЕМ ЗАПИСЬ
Объявляем объект с обновленными данными:
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 и изменить
только необходимые поля!
                                          @dmytromindra #msugodua
ЗАПРАШИВАЕМ ЗАПИСЬ
Одиночный объект:
tableService.queryEntity(myTableName, myPartition, myRowK
ey, 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) {…}

                                       @dmytromindra #msugodua
КАК НАСЧЕТ 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/



                                                                @dmytromindra #msugodua
WEB в реальном времени
SOCKET.IO




               @dmytromindra #msugodua
WebSockets
                                     Постоянное подключение к
                                     серверу.
                                     Часть стандарта HTML5
                                     Предназначен для
                                     построения Real-Time
                                     приложений.



http://tools.ietf.org/html/rfc6455               @dmytromindra #msugodua
Что такое SOCKET.IO?
Больше, чем просто    Виды транспорта:
WebSockets.           WebSocket
Имеет                 Flash Socket
альтернативные виды
транспорта.
                      AJAX long-polling
                      AJAX multipart streaming
Поставляется с
клиентской            IFrame
библиотектой.         JSONP polling


                                   @dmytromindra #msugodua
Время действовать
Напишем              В нашем случае этим
приложение, работа   приложением будет обмен
ющее в реальном      мгновенными сообщениями.
времени.




                                @dmytromindra #msugodua
Подводим итоги

В ЗАКЛЮЧЕНИЕ




                 @dmytromindra #msugodua
Мои аргументы:
 1. JavaScript невероятно популярен. На рынке много
    программистов.

 2. JavaScript будет единым языком и на сервере и
    на клиенте. Никакого дублирования кода.

 3. Асинхронная событийная модель.




                                     @dmytromindra #msugodua
Внеклассное чтение
Как убедить босса?
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



                                                             @dmytromindra #msugodua
Это стоит попробовать!

СПАСИБО !
Dmytro.Mindra@gmail.com

                          @dmytromindra #msugodua

More Related Content

What's hot (20)

PDF
JavaScript Базовый. Занятие 08.
Igor Shkulipa
 
PDF
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
PPT
Web весна 2013 лекция 9
Technopark
 
PDF
Kranonit s16 (python). dmitry furzenko
Krivoy Rog IT Community
 
PDF
Инструментируй это
Roman Dvornov
 
PDF
Очередной скучный доклад про логгирование
Python Meetup
 
PPTX
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest
 
PDF
Асинхронный JavaScript
Александр Рудевич
 
PDF
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
Krivoy Rog IT Community
 
PDF
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
corehard_by
 
PDF
Алексей Андросов - Debugger: Отладка кода
Yandex
 
PDF
Basis.js – «под капотом»
Roman Dvornov
 
PDF
Использование юнит-тестов для повышения качества разработки
victor-yastrebov
 
PDF
МАИ, Сети ЭВМ, Лекция №4
Dima Dzuba
 
PPTX
JSSDK: Начало
Константин Лебедев
 
PDF
Java осень 2014 занятие 3
Technopark
 
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Ontico
 
PDF
Java осень 2014 занятие 5
Technopark
 
PDF
C++ refelection and cats
corehard_by
 
PDF
JavaScript Базовый. Занятие 04.
Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
Web весна 2013 лекция 9
Technopark
 
Kranonit s16 (python). dmitry furzenko
Krivoy Rog IT Community
 
Инструментируй это
Roman Dvornov
 
Очередной скучный доклад про логгирование
Python Meetup
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest
 
Асинхронный JavaScript
Александр Рудевич
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
Krivoy Rog IT Community
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
corehard_by
 
Алексей Андросов - Debugger: Отладка кода
Yandex
 
Basis.js – «под капотом»
Roman Dvornov
 
Использование юнит-тестов для повышения качества разработки
victor-yastrebov
 
МАИ, Сети ЭВМ, Лекция №4
Dima Dzuba
 
Java осень 2014 занятие 3
Technopark
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Ontico
 
Java осень 2014 занятие 5
Technopark
 
C++ refelection and cats
corehard_by
 
JavaScript Базовый. Занятие 04.
Igor Shkulipa
 

Viewers also liked (8)

PPTX
HTML 5
Alex Tumanoff
 
ODP
Использование Qualcomm Augmented Reality в приложениях для Android
Alex Tumanoff
 
PPTX
Object-2-Object mapping, как приправа к вашему проекту
Alex Tumanoff
 
PPTX
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
PPTX
Spring.new hope.1.3
Alex Tumanoff
 
PPTX
Java 8 in action.jinq.v.1.3
Alex Tumanoff
 
PPTX
Sergey Gavruk - WebMatrix
beloslab
 
PPTX
Impact Mapping на практике
Alexander Byndyu
 
Использование Qualcomm Augmented Reality в приложениях для Android
Alex Tumanoff
 
Object-2-Object mapping, как приправа к вашему проекту
Alex Tumanoff
 
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
Spring.new hope.1.3
Alex Tumanoff
 
Java 8 in action.jinq.v.1.3
Alex Tumanoff
 
Sergey Gavruk - WebMatrix
beloslab
 
Impact Mapping на практике
Alexander Byndyu
 
Ad

Similar to Windows Azure and node js (20)

PPTX
Windows Azure & NodeJS Microsoft SWIT 2012
Dmytro Mindra
 
PDF
Серверный JavaScript: NodeJS и CouchDB
Stepan Stolyarov
 
PDF
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest
 
PPTX
What do you MEAN? или введение в Fullstack JavaScript
Vasiliy Teliatnikov
 
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
PPT
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
PPT
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
PDF
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
PDF
Node.js Меньше сложности, больше надежности Holy.js 2021
Timur Shemsedinov
 
PPTX
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Dmytro Mindra
 
PDF
От заката до рассвета | Максим Безуглый | Zlit Tech
Zlit
 
PDF
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
GeeksLab Odessa
 
PDF
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
Ontico
 
PDF
Масштабируемая архитектура фронтенда
Roman Dvornov
 
PDF
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Fwdays
 
PDF
Павел Юрийчук - Разработка приложений под мобильные браузеры
UA Mobile
 
PPT
Эффективное программирование на NodeJS
Yura Bogdanov
 
PPTX
Построение собственного JS SDK — зачем и как?
buranLcme
 
PPTX
разработка бизнес приложений (9)
Alexander Gornik
 
PDF
YaC 2013 Notes
Anton Ignatov
 
Windows Azure & NodeJS Microsoft SWIT 2012
Dmytro Mindra
 
Серверный JavaScript: NodeJS и CouchDB
Stepan Stolyarov
 
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest
 
What do you MEAN? или введение в Fullstack JavaScript
Vasiliy Teliatnikov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
Node.js Меньше сложности, больше надежности Holy.js 2021
Timur Shemsedinov
 
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Dmytro Mindra
 
От заката до рассвета | Максим Безуглый | Zlit Tech
Zlit
 
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
GeeksLab Odessa
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
Ontico
 
Масштабируемая архитектура фронтенда
Roman Dvornov
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Fwdays
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
UA Mobile
 
Эффективное программирование на NodeJS
Yura Bogdanov
 
Построение собственного JS SDK — зачем и как?
buranLcme
 
разработка бизнес приложений (9)
Alexander Gornik
 
YaC 2013 Notes
Anton Ignatov
 
Ad

More from Alex Tumanoff (20)

PPTX
Sql server 2019 New Features by Yevhen Nedaskivskyi
Alex Tumanoff
 
PPTX
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Alex Tumanoff
 
PPTX
Azure data bricks by Eugene Polonichko
Alex Tumanoff
 
PPTX
Sdlc by Anatoliy Anthony Cox
Alex Tumanoff
 
PPTX
Kostenko ux november-2014_1
Alex Tumanoff
 
PPT
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
Alex Tumanoff
 
PPTX
Sql saturday azure storage by Anton Vidishchev
Alex Tumanoff
 
PPTX
Navigation map factory by Alexey Klimenko
Alex Tumanoff
 
PPTX
Serialization and performance by Sergey Morenets
Alex Tumanoff
 
PPTX
Игры для мобильных платформ by Алексей Рыбаков
Alex Tumanoff
 
PDF
Android sync adapter
Alex Tumanoff
 
PPTX
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
PPTX
Bdd by Dmitri Aizenberg
Alex Tumanoff
 
PPTX
Неформальные размышления о сертификации в IT
Alex Tumanoff
 
PPTX
Разработка расширений Firefox
Alex Tumanoff
 
PPTX
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
Alex Tumanoff
 
PPTX
Patterns of parallel programming
Alex Tumanoff
 
PPTX
Lambda выражения и Java 8
Alex Tumanoff
 
PPTX
XP практики в проектах с тяжелой наследственностью
Alex Tumanoff
 
PPTX
Anti patterns
Alex Tumanoff
 
Sql server 2019 New Features by Yevhen Nedaskivskyi
Alex Tumanoff
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Alex Tumanoff
 
Azure data bricks by Eugene Polonichko
Alex Tumanoff
 
Sdlc by Anatoliy Anthony Cox
Alex Tumanoff
 
Kostenko ux november-2014_1
Alex Tumanoff
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
Alex Tumanoff
 
Sql saturday azure storage by Anton Vidishchev
Alex Tumanoff
 
Navigation map factory by Alexey Klimenko
Alex Tumanoff
 
Serialization and performance by Sergey Morenets
Alex Tumanoff
 
Игры для мобильных платформ by Алексей Рыбаков
Alex Tumanoff
 
Android sync adapter
Alex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
Bdd by Dmitri Aizenberg
Alex Tumanoff
 
Неформальные размышления о сертификации в IT
Alex Tumanoff
 
Разработка расширений Firefox
Alex Tumanoff
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
Alex Tumanoff
 
Patterns of parallel programming
Alex Tumanoff
 
Lambda выражения и Java 8
Alex Tumanoff
 
XP практики в проектах с тяжелой наследственностью
Alex Tumanoff
 
Anti patterns
Alex Tumanoff
 

Windows Azure and node js

  • 1. Дмитрий Миндра, Lohika WEB В РЕАЛЬНОМ ВРЕМЕНИ С WINDOWS AZURE И NODE.JS http://www.slideshare.net/dmytromindra @dmytromindra #msugodua
  • 2. Вы замечательные ! @dmytromindra #msugodua
  • 3. Для кого этот доклад? Вам нравится JavaScript Вы хотите чего-то нового! Вам нравится Web @dmytromindra #msugodua
  • 4. Мустафин Дмитрий RnD Team Lead Microsoft Technologies Lab Member @dmytromindra #msugodua
  • 5. Нечто Великолепное ПО @dmytromindra #msugodua
  • 6. Посторонись, пресловутый PHP! Долой Java! Старичок Perl, тебе так вообще давно пора на пенсию. И как же вы уже достали, попсовые Ruby и Python! (c) xakep http://www.xakep.ru/post/53583/ @dmytromindra #msugodua
  • 7. Мы Ждем Перемен ! @dmytromindra #msugodua
  • 9. & Node.js 23 июня 2011 @dmytromindra #msugodua
  • 10. HELLO WORLD var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn'); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); @dmytromindra #msugodua
  • 11. ПОЧЕМУ NODE.JS? Цель Node.JS - Event Driven обеспечение Все асинхронно простого способа создания Работает на Google V8 масштабируемых Официально поддерживается сетевых программ. компанией Microsoft Хорошо параллелится (при работе с вводом/выводом) @dmytromindra #msugodua
  • 12. АСИНХРОННОСТЬ Пока выполняется операция, которую надо ждать, Node.JS занимается полезным делом. @dmytromindra #msugodua
  • 13. СЛАБЫЕ СТОРОНЫ У Node.JS есть Плохо справляется с слабые стороны, о тяжелыми вычислительными которых надо задачами помнить. Использует только одно ядро процессора (есть утилита Cluster) @dmytromindra #msugodua
  • 14. Спагетти код 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()); ... }); }); }); }); @dmytromindra #msugodua
  • 15. ХОРОШИЙ ИНСТРУМЕНТ Для подходящей задачи. Важно уметь отличить подходящую задачу от неподходящей. @dmytromindra #msugodua
  • 16. Есть ли у нас план? 1. Привет Node! 2. Web Проект 3. SPA 4. Windows Azure 5. Socket.IO @dmytromindra #msugodua
  • 18. Node Package Manager Управляет установкой модулей, например npm install azure npm install –g express @dmytromindra #msugodua
  • 20. Что в меню ? JavaScript везде. И Express (сервер) на сервере, и на Jade (сервер) клиенте. Некоторые Mustache (сервер , клиент) библиотеки Sammy.js (клиент) используются jQuery (клиент) одновременно и на сервере и на клиенте. @dmytromindra #msugodua
  • 21. ПРОСТОЕ WEB ПРИЛОЖЕНИЕ Постараемся построить простое веб приложение при помощи Express, Jade и пары заготовок. @dmytromindra #msugodua
  • 22. SPA* – приложение-страница Приложение, состоящее из одной веб страницы и обилия скриптов. Асинхронно общается с сервером. Не перегружается. *http://en.wikipedia.org/wiki/Single_Page_Application @dmytromindra #msugodua
  • 23. Интеграция с WINDOWS AZURE @dmytromindra #msugodua
  • 24. ПРИСТУПАЕМ К РАБОТЕ Мы кратко расскажем как:  создать новое 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/ @dmytromindra #msugodua
  • 25. ЕСЛИ КОРОТКО, ТО Выполните команду npm install azure В файле «c:nodetasklistWebRole1Web.cloud.config» замените тестовые данные на данные вашей учетной записи Azure. Вы найдете много полезной информации в файле: «C:nodetasklistWebRole1node_modulesazureREADME.md» Создайте новую переменную в вашем JavaScript файле: var azure = require('azure'); Все готово! Поехали ! @dmytromindra #msugodua
  • 26. СЕРВИС ТАБЛИЦ Создаем сервис: var tableService = azure.createTableService(); Назначаем имя таблице: var myTableName = “MyTable”; Создаем таблицу: tableService.createTableIfNotExists(myTableName, OnCreatedFu nc); Где OnCreatedFunc является функцией, которая выполнится после создания таблицы (Callback) function OnCreatedFunc(errorObject, createdBoolFlag) {…} Больше информации по адресу: http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/table-services/ @dmytromindra #msugodua
  • 27. ДОБАВЛЯЕМ ЗАПИСЬ В ТАБЛИЦУ Таблица 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) {…} @dmytromindra #msugodua
  • 28. ОБНОВЛЯЕМ ЗАПИСЬ Объявляем объект с обновленными данными: 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 и изменить только необходимые поля! @dmytromindra #msugodua
  • 29. ЗАПРАШИВАЕМ ЗАПИСЬ Одиночный объект: tableService.queryEntity(myTableName, myPartition, myRowK ey, 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) {…} @dmytromindra #msugodua
  • 30. КАК НАСЧЕТ 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/ @dmytromindra #msugodua
  • 31. WEB в реальном времени SOCKET.IO @dmytromindra #msugodua
  • 32. WebSockets Постоянное подключение к серверу. Часть стандарта HTML5 Предназначен для построения Real-Time приложений. http://tools.ietf.org/html/rfc6455 @dmytromindra #msugodua
  • 33. Что такое SOCKET.IO? Больше, чем просто Виды транспорта: WebSockets. WebSocket Имеет Flash Socket альтернативные виды транспорта. AJAX long-polling AJAX multipart streaming Поставляется с клиентской IFrame библиотектой. JSONP polling @dmytromindra #msugodua
  • 34. Время действовать Напишем В нашем случае этим приложение, работа приложением будет обмен ющее в реальном мгновенными сообщениями. времени. @dmytromindra #msugodua
  • 36. Мои аргументы: 1. JavaScript невероятно популярен. На рынке много программистов. 2. JavaScript будет единым языком и на сервере и на клиенте. Никакого дублирования кода. 3. Асинхронная событийная модель. @dmytromindra #msugodua
  • 37. Внеклассное чтение Как убедить босса? 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 @dmytromindra #msugodua