SlideShare a Scribd company logo
1 of 22
Download to read offline
Доставка данных в
реальном времени
    Александр Бешкенадзе
Структура
Для чего нам это нужно?
Прощаемся с Comet: анализ популярных решений,
критика, поиски альтернативы.
Встречаем и знакомимся с WebSocket и Push: анализ
поддержки браузерами, библиотеки, решение проблем.
Работа с Node.JS и Redis: запуск и настройка,
использование pub/sub, репликация.
Создаем готовое приложение.
Для чего нам это
          нужно?
Вещание в реальном времени (текстовые
трансляции)
Онлайн - Игры
Синхронизация действий пользователей
Оповещение пользователя о событии
Прощаемся с Comet: анализ
  популярных решений, критика,
      поиски альтернативы.
APE (http://www.ape-project.org,
http://habr.ru/blogs/webdev/60803/)
DKLab Realplexor (http://dklab.ru/lib/
dklab_realplexor/, http:// habrahabr.ru/blogs/hi/79189)
Протокол Bayeux
(http://svn.cometd.com/trunk/bayeux/bayeux.html) .
Протокол BOSH
(http://xmpp.org/extensions/xep-0124.html)
Lightstreamer ( www.lightstreamer.com)
Прощаемся с Comet: анализ
  популярных решений, критика,
      поиски альтернативы.
Long polling — сервер не отвечает сразу на XHR-запрос, а
по событию.
Forever frame — создает iframe, в который сервер
постоянно дописывает события по мере их поступлений.
Script tags — динамически создаваемые JS-блоки, что
позволяет кросс-доменные коммуникации.
ActiveXObject("htmlfile") — метод доступный в IE и
использующий ActiveX
JSONRequest object ( www.json.org/JSONRequest.html ) —
реализует двухстороннее соединение, посредством двух
одновременных запросов (передача/прием).
Прощаемся с Comet: анализ
 популярных решений, критика,
     поиски альтернативы.

Возможные задержки между
событием и уведомлением.
Входящий трафик на сервер
Comet — один большой хак
Прощаемся с Comet: анализ
  популярных решений, критика,
      поиски альтернативы


Web Socket как альтернатива Comet
(Full-Duplex)
EventSource как альтернатива Comet (Push)
Встречаем и знакомимся с WebSocket и
  Push: анализ поддержки браузерами,
    библиотеки, решение проблем


WebSocket — это стандарт HTML5 (http://
dev.w3.org/html5/websockets/)

Server-Sent Events или EventSource — так же
стандарт HTML5 (http://dev.w3.org/html5/
eventsource/)
Встречаем и знакомимся с WebSocket и
  Push: анализ поддержки браузерами,
    библиотеки, решение проблем


WebSocket
Неограниченное количество подключений на
странице
Full-Duplex
Простой API
Встречаем и знакомимся с WebSocket и
  Push: анализ поддержки браузерами,
    библиотеки, решение проблем
Поддержка WebSocket
Google Chrome (начиная с версии 4.0.249.0)
Apple Safari (начиная с версии 5.0.7533.16)
Mobile Safari (iOS 4.0 beta 2, позднее убрана)
Mozilla Firefox (начиная с версии 3.7)
Opera (до конца года)
Internet Explorer (начиная с версии 9)
Встречаем и знакомимся с WebSocket и
  Push: анализ поддержки браузерами,
    библиотеки, решение проблем


Поддержка EventSource
Google Chrome (начиная с версии 6)
Apple Safari (начиная с версии 5)
Opera (начиная с версии 9, через тег
<event-source/>)
Встречаем и знакомимся с WebSocket и
  Push: анализ поддержки браузерами,
    библиотеки, решение проблем



Проблема : Как запустить, там где нет
поддержки WebSocket
Использовать библиотеку Socket.IO (http://
socket.io/)
Работа с Node.JS и Redis: запуск и
настройка, использование pub/sub,
           репликация

Node.js — событийно-ориентированный
фреймворк на движке V8 JavaScript.
Redis — высокопроизводительное
нереляционное распределённое хранилище
данных.
Работа с Node.JS и Redis: запуск и
настройка, использование pub/sub,
           репликация


Установка
Node.JS — ./configure && make && make install
Redis — make
Работа с Node.JS и Redis: запуск и
настройка, использование pub/sub,
           репликация


Node.JS — запускается без файла настроек.
Redis — использует настройки по умолчанию
или из файла (менее 30 строк).
Работа с Node.JS и Redis: запуск и
настройка, использование pub/sub,
           репликация
Redis Publish/Subscribe
SUBSCRIBE канал1, канал2 - подписка
UNSUBSCRIBE канал1, канал2 (пусто - от всех) -
отписка
PSUBSCRIBE шаблон*, шаблон* - подписка
PUNSUBSCRIBE шаблон*, шаблон* (пусто - от
всех) - отписка
PUBLISH канал1 сообщение
Работа с Node.JS и Redis: запуск и
настройка, использование pub/sub,
           репликация

Репликация
Несколько slave-серверов, цепочки slave
серверов
Master не блокируется
redis.conf: slaveof адрес порт
Создаем готовое
        приложение

Чат (ClientSide) - 4 кб.
Чат (ServerSide) - 49 кб.
Размер приложение 53 кб.
Создаем готовое
            приложение
   $("send").addEventListener("click", function () {
    if (conn) conn.send($("messge").value);
    return false;
}, true);
var conn;
window.onload = function () {
    if (window["WebSocket"]) conn = new WebSocket("ws://localhost:8000/
test");
    else return;
    conn.onmessage = function (evt) {
        var msg = document.createElement("p");
        msg.innerHTML = JSON.parse(evt.data).message;
        $("log").appendChild(msg);
    };
}

function $(id) {
    return document.getElementById(id);
}
Создаем готовое
        приложение
Чат (ServerSide) - 4 кб.
Библиотека WebSocket (http://github.com/miksago/
node-websocket-server) - 16 кб.

Библиотека Redis Node Client (http://github.com/
fictorial/redis-node-client) - 33 кб.
Создаем готовое
              приложение
    var sys = require("sys"),
    ws = require('./lib/ws'),
    client = require("./lib/redis-client").createClient('6380'),
    client2 = require("./lib/redis-client").createClient('6380');
var server = ws.createServer(), conn = false;
server.addListener("connection", function (conn) {
    say(conn, " connected");
    conn.addListener("close", function () {
         say(conn, " disconnected");
    });
    conn.addListener("message", function (message) {
         say(conn, message);
    });
});
server.listen(8000, "localhost");
client.subscribeTo("chat", function (channel, message, subscriptionPattern) {
    if (server) server.broadcast(message);
});
function say(conn, message) {
    client2.publish("chat", JSON.stringify({
         message: "<" + conn._id + "> " + message
    }));
}
Вопросы?
email/gtalk: beshkenadze@gmail.com

More Related Content

What's hot

08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backendRoman Brovko
 
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTPRoman Brovko
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервераRoman Brovko
 
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕСС
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕССА.Горбов, А.Фефелов. Секреты АБАК-ПРЕСС
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕССit-people
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...KazHackStan
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsguest092df8
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...KazHackStan
 
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Tanya Denisyuk
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemKazHackStan
 
Что надо знать о HTTP/2
Что надо знать о HTTP/2Что надо знать о HTTP/2
Что надо знать о HTTP/2Badoo Development
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Tanya Denisyuk
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_rumcroitor
 
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...KazHackStan
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxYandex
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_rumcroitor
 

What's hot (20)

08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend
 
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP
 
Periculum est in mora
Periculum est in moraPericulum est in mora
Periculum est in mora
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
 
HTTP протокол
HTTP протоколHTTP протокол
HTTP протокол
 
KazHackStan 2017 | Tracking
KazHackStan 2017 | TrackingKazHackStan 2017 | Tracking
KazHackStan 2017 | Tracking
 
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕСС
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕССА.Горбов, А.Фефелов. Секреты АБАК-ПРЕСС
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕСС
 
WWW
WWWWWW
WWW
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
 
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
 
Что надо знать о HTTP/2
Что надо знать о HTTP/2Что надо знать о HTTP/2
Что надо знать о HTTP/2
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
 
Fiddler
FiddlerFiddler
Fiddler
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, Ajax
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 

Viewers also liked

Fast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redisFast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redisMoscow.pm
 
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013Moscow.pm
 
Descriptions 2
Descriptions 2Descriptions 2
Descriptions 2Mireiavg
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовAndrew Shitov
 
Очереди и блокировки
Очереди и блокировкиОчереди и блокировки
Очереди и блокировкиAlexandre Kalendarev
 
Аналитика над петабайтами в реальном времени
Аналитика над петабайтами в реальном времениАналитика над петабайтами в реальном времени
Аналитика над петабайтами в реальном времениCodeFest
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolAlexandre Kalendarev
 
Scaling Crashlytics: Building Analytics on Redis 2.6
Scaling Crashlytics: Building Analytics on Redis 2.6Scaling Crashlytics: Building Analytics on Redis 2.6
Scaling Crashlytics: Building Analytics on Redis 2.6Crashlytics
 

Viewers also liked (8)

Fast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redisFast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redis
 
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013
 
Descriptions 2
Descriptions 2Descriptions 2
Descriptions 2
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
Очереди и блокировки
Очереди и блокировкиОчереди и блокировки
Очереди и блокировки
 
Аналитика над петабайтами в реальном времени
Аналитика над петабайтами в реальном времениАналитика над петабайтами в реальном времени
Аналитика над петабайтами в реальном времени
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере Tarantool
 
Scaling Crashlytics: Building Analytics on Redis 2.6
Scaling Crashlytics: Building Analytics on Redis 2.6Scaling Crashlytics: Building Analytics on Redis 2.6
Scaling Crashlytics: Building Analytics on Redis 2.6
 

Similar to Доставка данных в реальном времени.

Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
 
Облако Windows Azure для тестирования и разработки
Облако Windows Azure для тестирования и разработкиОблако Windows Azure для тестирования и разработки
Облако Windows Azure для тестирования и разработкиAlexey Bokov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptVasiliy Teliatnikov
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Artur Baranok
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Alexey Bokov
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 

Similar to Доставка данных в реальном времени. (20)

Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
 
Облако Windows Azure для тестирования и разработки
Облако Windows Azure для тестирования и разработкиОблако Windows Azure для тестирования и разработки
Облако Windows Azure для тестирования и разработки
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
JSSDK: Начало
JSSDK: НачалоJSSDK: Начало
JSSDK: Начало
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 

Доставка данных в реальном времени.

  • 1. Доставка данных в реальном времени Александр Бешкенадзе
  • 2. Структура Для чего нам это нужно? Прощаемся с Comet: анализ популярных решений, критика, поиски альтернативы. Встречаем и знакомимся с WebSocket и Push: анализ поддержки браузерами, библиотеки, решение проблем. Работа с Node.JS и Redis: запуск и настройка, использование pub/sub, репликация. Создаем готовое приложение.
  • 3. Для чего нам это нужно? Вещание в реальном времени (текстовые трансляции) Онлайн - Игры Синхронизация действий пользователей Оповещение пользователя о событии
  • 4. Прощаемся с Comet: анализ популярных решений, критика, поиски альтернативы. APE (http://www.ape-project.org, http://habr.ru/blogs/webdev/60803/) DKLab Realplexor (http://dklab.ru/lib/ dklab_realplexor/, http:// habrahabr.ru/blogs/hi/79189) Протокол Bayeux (http://svn.cometd.com/trunk/bayeux/bayeux.html) . Протокол BOSH (http://xmpp.org/extensions/xep-0124.html) Lightstreamer ( www.lightstreamer.com)
  • 5. Прощаемся с Comet: анализ популярных решений, критика, поиски альтернативы. Long polling — сервер не отвечает сразу на XHR-запрос, а по событию. Forever frame — создает iframe, в который сервер постоянно дописывает события по мере их поступлений. Script tags — динамически создаваемые JS-блоки, что позволяет кросс-доменные коммуникации. ActiveXObject("htmlfile") — метод доступный в IE и использующий ActiveX JSONRequest object ( www.json.org/JSONRequest.html ) — реализует двухстороннее соединение, посредством двух одновременных запросов (передача/прием).
  • 6. Прощаемся с Comet: анализ популярных решений, критика, поиски альтернативы. Возможные задержки между событием и уведомлением. Входящий трафик на сервер Comet — один большой хак
  • 7. Прощаемся с Comet: анализ популярных решений, критика, поиски альтернативы Web Socket как альтернатива Comet (Full-Duplex) EventSource как альтернатива Comet (Push)
  • 8. Встречаем и знакомимся с WebSocket и Push: анализ поддержки браузерами, библиотеки, решение проблем WebSocket — это стандарт HTML5 (http:// dev.w3.org/html5/websockets/) Server-Sent Events или EventSource — так же стандарт HTML5 (http://dev.w3.org/html5/ eventsource/)
  • 9. Встречаем и знакомимся с WebSocket и Push: анализ поддержки браузерами, библиотеки, решение проблем WebSocket Неограниченное количество подключений на странице Full-Duplex Простой API
  • 10. Встречаем и знакомимся с WebSocket и Push: анализ поддержки браузерами, библиотеки, решение проблем Поддержка WebSocket Google Chrome (начиная с версии 4.0.249.0) Apple Safari (начиная с версии 5.0.7533.16) Mobile Safari (iOS 4.0 beta 2, позднее убрана) Mozilla Firefox (начиная с версии 3.7) Opera (до конца года) Internet Explorer (начиная с версии 9)
  • 11. Встречаем и знакомимся с WebSocket и Push: анализ поддержки браузерами, библиотеки, решение проблем Поддержка EventSource Google Chrome (начиная с версии 6) Apple Safari (начиная с версии 5) Opera (начиная с версии 9, через тег <event-source/>)
  • 12. Встречаем и знакомимся с WebSocket и Push: анализ поддержки браузерами, библиотеки, решение проблем Проблема : Как запустить, там где нет поддержки WebSocket Использовать библиотеку Socket.IO (http:// socket.io/)
  • 13. Работа с Node.JS и Redis: запуск и настройка, использование pub/sub, репликация Node.js — событийно-ориентированный фреймворк на движке V8 JavaScript. Redis — высокопроизводительное нереляционное распределённое хранилище данных.
  • 14. Работа с Node.JS и Redis: запуск и настройка, использование pub/sub, репликация Установка Node.JS — ./configure && make && make install Redis — make
  • 15. Работа с Node.JS и Redis: запуск и настройка, использование pub/sub, репликация Node.JS — запускается без файла настроек. Redis — использует настройки по умолчанию или из файла (менее 30 строк).
  • 16. Работа с Node.JS и Redis: запуск и настройка, использование pub/sub, репликация Redis Publish/Subscribe SUBSCRIBE канал1, канал2 - подписка UNSUBSCRIBE канал1, канал2 (пусто - от всех) - отписка PSUBSCRIBE шаблон*, шаблон* - подписка PUNSUBSCRIBE шаблон*, шаблон* (пусто - от всех) - отписка PUBLISH канал1 сообщение
  • 17. Работа с Node.JS и Redis: запуск и настройка, использование pub/sub, репликация Репликация Несколько slave-серверов, цепочки slave серверов Master не блокируется redis.conf: slaveof адрес порт
  • 18. Создаем готовое приложение Чат (ClientSide) - 4 кб. Чат (ServerSide) - 49 кб. Размер приложение 53 кб.
  • 19. Создаем готовое приложение $("send").addEventListener("click", function () { if (conn) conn.send($("messge").value); return false; }, true); var conn; window.onload = function () { if (window["WebSocket"]) conn = new WebSocket("ws://localhost:8000/ test"); else return; conn.onmessage = function (evt) { var msg = document.createElement("p"); msg.innerHTML = JSON.parse(evt.data).message; $("log").appendChild(msg); }; } function $(id) { return document.getElementById(id); }
  • 20. Создаем готовое приложение Чат (ServerSide) - 4 кб. Библиотека WebSocket (http://github.com/miksago/ node-websocket-server) - 16 кб. Библиотека Redis Node Client (http://github.com/ fictorial/redis-node-client) - 33 кб.
  • 21. Создаем готовое приложение var sys = require("sys"), ws = require('./lib/ws'), client = require("./lib/redis-client").createClient('6380'), client2 = require("./lib/redis-client").createClient('6380'); var server = ws.createServer(), conn = false; server.addListener("connection", function (conn) { say(conn, " connected"); conn.addListener("close", function () { say(conn, " disconnected"); }); conn.addListener("message", function (message) { say(conn, message); }); }); server.listen(8000, "localhost"); client.subscribeTo("chat", function (channel, message, subscriptionPattern) { if (server) server.broadcast(message); }); function say(conn, message) { client2.publish("chat", JSON.stringify({ message: "<" + conn._id + "> " + message })); }