Браузерные api обмена данными: какие и зачем

61
БРАУЗЕРНЫЕ API ОБМЕНА ДАННЫМИ какие и зачем Павел Клименков

Upload: pavel-klimiankou

Post on 06-Aug-2015

1.557 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Браузерные API обмена данными: какие и зачем

БРАУЗЕРНЫЕ APIОБМЕНА ДАННЫМИ

какие и зачем

Павел Клименков

Page 2: Браузерные API обмена данными: какие и зачем

СЕТЕВАЯ БИБЛИЯ

Page 3: Браузерные API обмена данными: какие и зачем
Page 4: Браузерные API обмена данными: какие и зачем

ПЛАН НА ВЕЧЕР

Request

Response

Request

Response

Request

Response

Page 5: Браузерные API обмена данными: какие и зачем

Request

Response

Page 6: Браузерные API обмена данными: какие и зачем

MSXML2XMLHTTP

XMLHttpRequest

Классический XHR

Page 7: Браузерные API обмена данными: какие и зачем

ПРИМЕР

Page 8: Браузерные API обмена данными: какие и зачем

ОСОБЕННОСТИHTTP(S): GET, POST, PUT, DELETE

Только текст (либо base64)

Перезапись http headers

Sync/async

GZip, deflate компрессия

Page 9: Браузерные API обмена данными: какие и зачем

ПОДДЕРЖКА

ВЕЗДЕ!

Page 10: Браузерные API обмена данными: какие и зачем

ЧЕГО НЕ ХВАТАЕТ

Поддержки файлов

Кросс-доменных запросов

Удобных POST запросов

Page 11: Браузерные API обмена данными: какие и зачем

XML HTTP REQUEST LEVEL 2 (2011)

+ бинарные данные и файлы

+ поддержка html форм - объект FormData

+ кросс доменные запросы (CORS)

+ события о прогрессе загрузки

Page 12: Браузерные API обмена данными: какие и зачем

CORSЗАГОЛОВОК ЗАПРОСА

GET /secret.html HTTP/1.1

Host: microsoft.com

Origin:

http://google.com

Page 13: Браузерные API обмена данными: какие и зачем

CORSЗАГОЛОВОК ОТВЕТА

HTTP/1.1 200 OK

Access-Control-Allow-

Origin: http

://google.com

Page 14: Браузерные API обмена данными: какие и зачем

FORM DATA

Page 15: Браузерные API обмена данными: какие и зачем

ПОДДЕРЖКА

Page 16: Браузерные API обмена данными: какие и зачем

FETCH()

Пришел из service worker

Promise ориентированный

Почти как XMLHttpRequest

Сырой

Page 17: Браузерные API обмена данными: какие и зачем

FETCH()

Page 18: Браузерные API обмена данными: какие и зачем

ПОДДЕРЖКА

Page 19: Браузерные API обмена данными: какие и зачем

ПОДРЕЗЮМИРУЕМ

У нас есть XMLHttpRequest и fetch()

Они работают по HTTP(S)

Ориентированы на атомарный запрос: сделал - свободен

Работают как с текстом, так и с файлами

Поддержка кросс доменных запросов

Page 20: Браузерные API обмена данными: какие и зачем

ЧТО ПЛОХО

Минус одно TCP соединение

Не годится для real time доставки событий с сервера

> polling

> long polling

Page 21: Браузерные API обмена данными: какие и зачем

LONG POLLING

Page 22: Браузерные API обмена данными: какие и зачем

Request

Response

Page 23: Браузерные API обмена данными: какие и зачем

SERVER-SENT EVENTS(2006)

SSE

Page 24: Браузерные API обмена данными: какие и зачем

EVENT SOURCEОбъект, который получает URL на входе, а на выходе бросает передаваемые сервером события

Page 25: Браузерные API обмена данными: какие и зачем

ОСОБЕННОСТИHTTP(s)

Автоматические восстановление соединения

Отслеживание последнего полученного события

Простой polyfill

Page 26: Браузерные API обмена данными: какие и зачем

SSE ЗАПРОС

GET /users/updates HTTP/1.1

Host: myserver.com

Accept: text/event-stream

Last-Event-ID: 43

Page 27: Браузерные API обмена данными: какие и зачем

SSE ОТВЕТ

HTTP/1.1 200 OK

Connection: keep-alive

Content-Type: text/event-stream

Transfer-Encoding: chunked

Page 28: Браузерные API обмена данными: какие и зачем

SSE СОБЫТИЯdata: Simple message

data: {“message”: “JSON payload”}

event: user.updatedata: {“changed”: “firstName”}

id: 42event: broadcastdata: shutdown

1

2

3

4

Page 29: Браузерные API обмена данными: какие и зачем

ПРИМЕР ИСПОЛЬЗОВАНИЯ

Поток координат движущегоcя объекта на карте

Поток измененных ID объектов, для сброса клиентских кэшей

Page 30: Браузерные API обмена данными: какие и зачем

ПОДДЕРЖКА

Page 31: Браузерные API обмена данными: какие и зачем

ЧТО НЕ ОЧЕНЬНет поддержки IE (но простой polyfill)

Только текст (но есть base64)

Нельзя дополнить запрос

Page 32: Браузерные API обмена данными: какие и зачем

Request

Response

Page 33: Браузерные API обмена данными: какие и зачем

WEB SOCKET2010

Page 34: Браузерные API обмена данными: какие и зачем

WEB SOCKETWebSocket это API, который позволяет отправлять и получать текстовые и бинарные сообщения серверу сколько угодно раз и в любом порядке

Page 35: Браузерные API обмена данными: какие и зачем

ОСОБЕННОСТИ

Начинается как HTTP(S), но потом переходим на свой бинарный формат сообщений

ws:// и wss:// вместо http:// и https://

как текстовые, так и бинарные данные

Page 36: Браузерные API обмена данными: какие и зачем

ПРИМЕРЫ

Онлайн чат

Доставка серверных событий с обратной связью

Прогрессивная загрузка медиа

Page 37: Браузерные API обмена данными: какие и зачем

КАК Я ВНЕДРЯЛ WEB SOCKETВ СВОЙ СЕРВЕР

Более сложный протокол, чем HTTP

Управление состоянием соединения на клиенте

Различные спецификации (Hybi 13)

SSE был бы лучше

Page 38: Браузерные API обмена данными: какие и зачем

ПОДДЕРЖКА

Page 39: Браузерные API обмена данными: какие и зачем

ЧТО НЕ ТАК С WEBSOCKETСложный протокол (если придется внедрять)

Нет сжатия (что-то эксперементальное в Chrome)

Page 40: Браузерные API обмена данными: какие и зачем

ЧТО НЕ ТАК СО ВСЕМИ:XHR, SSE, WEBSOCKET

Нет мультиплексирования. Большой запрос тормозит все остальные

Всего 6 доступных TCP соединений. Каждый API сжирает по одному

Page 41: Браузерные API обмена данными: какие и зачем
Page 42: Браузерные API обмена данными: какие и зачем
Page 43: Браузерные API обмена данными: какие и зачем
Page 44: Браузерные API обмена данными: какие и зачем

WEBRTC2010

WebRTC это API для двунаправленной передачи текста и бинарного медиа напрямую между клиентами

Page 45: Браузерные API обмена данными: какие и зачем

ОСОБЕННОСТИ

UDP вместо TCP

Текст и банарные данные

Встроенная поддержка медиа данных

peer-to-peer

Обязательное шифрование не-медиа данных

Page 46: Браузерные API обмена данными: какие и зачем

ЭТО НЕ ТОЛЬКОSKYPE KILLER

Page 47: Браузерные API обмена данными: какие и зачем

ЗАЧЕМ ЭТО НУЖНО

Онлайновые игрушки

Обмен данными, которые важны клиенту, но не интересны серверу

Ок, сделать лучший скайп

Page 48: Браузерные API обмена данными: какие и зачем

ПОЧЕМУ WEBRTC

ТАКОЙ СЛОЖНЫЙ?

Page 49: Браузерные API обмена данными: какие и зачем

2 ПРИЧИНЫ

Клиентам как-то нужно найти друг друга

Нужно провести UDP траффик через NAT

Page 50: Браузерные API обмена данными: какие и зачем

SIGNALING CHANNELЧтобы начать соединение, нужно обменяться Offer и Answer через заранее известный канал

Page 51: Браузерные API обмена данными: какие и зачем

В КОМПЛЕКТЕ КАНАЛА НЕТ!Как signaling channel можно

использовать:

Сервер + WebSocket

Сервер + XHR,

Курьера

Отправить SMS товарищу

Page 52: Браузерные API обмена данными: какие и зачем

NAT TRAVERSALКуда слать UDP?

Page 53: Браузерные API обмена данными: какие и зачем

ВЫХОД: STUN, TURN

Page 54: Браузерные API обмена данными: какие и зачем

ВСЕ ОБХОДНЫЕ МАНЕВРЫЭТО ICE

ICE - interactive connectivity establishment

Используя STUN и TURN сервера, он перебирает пары IP:Port (ICE candidate), по которым можно подключиться снаружи

Page 55: Браузерные API обмена данными: какие и зачем

И ВСЁ ВМЕСТЕ1) Нам нужен signaling channel

2) Нам нужен список STUN/TURN серверов

3) RTCPeerConnection поможет создать Offer и найти ICE кандидатов

4) Всё это нужно передать через signaling channel другой стороне

5) Через signaling channel мы получим эти данные от второго клиента

Page 56: Браузерные API обмена данными: какие и зачем
Page 57: Браузерные API обмена данными: какие и зачем

ПОДДЕРЖКА

Page 58: Браузерные API обмена данными: какие и зачем

ЧТО ПЛОХО

Нет поддержки IE, Safari

Сложный polyfill

Сложно использовать

Сырая реализация

Page 59: Браузерные API обмена данными: какие и зачем

ИТАК

XMLHttpRequest Server-sent events

WebSocket WebRTC

fetch()

Page 60: Браузерные API обмена данными: какие и зачем

ЕЩЕ РАЗ О КНИГЕЗакрывает основные вопросы по сетям

Полная картина браузерных сетевых API

Page 61: Браузерные API обмена данными: какие и зачем

СПАСИБО!

/pasha.klimenkov

/in/pavelklimenkov

DotsAndBrackets.com