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

Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
guest092df8
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Tanya Denisyuk
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, Ajax
Yandex
 

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

Язык 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
Moscow.pm
 
Descriptions 2
Descriptions 2Descriptions 2
Descriptions 2
Mireiavg
 
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
Crashlytics
 

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 Доставка данных в реальном времени.

Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
Alexey Kachayev
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
Alexey Androsov
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 

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 лекция, петр волков
 

Recently uploaded

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 

Recently uploaded (9)

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 

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

  • 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 })); }