Чем можно обмениваться данными: XMLHttpRequest, fetch(), Server-Sent Events, WebSocket, WebRTC. В чем отличия. Какие недостатки. Примеры задач, под которые они заточены.
11. XML HTTP REQUEST
LEVEL 2 (2011)
+ бинарные данные и файлы
+ поддержка html форм - объект FormData
+ кросс доменные запросы (CORS)
+ события о прогрессе загрузки
19. ПОДРЕЗЮМИРУЕМ
У нас есть XMLHttpRequest и fetch()
Они работают по HTTP(S)
Ориентированы на атомарный запрос: сделал -
свободен
Работают как с текстом, так и с файлами
Поддержка кросс доменных запросов
20. ЧТО ПЛОХО
Минус одно TCP соединение
Не годится для real time доставки событий с
сервера
> polling
> long polling
34. WEB SOCKET
WebSocket это API, который позволяет
отправлять и получать текстовые и бинарные
сообщения серверу сколько угодно раз и в
любом порядке
35. ОСОБЕННОСТИ
Начинается как HTTP(S), но потом переходим
на свой бинарный формат сообщений
ws:// и wss:// вместо http:// и https://
как текстовые, так и бинарные данные
37. КАК Я ВНЕДРЯЛ WEB SOCKET
В СВОЙ СЕРВЕР
Более сложный протокол, чем HTTP
Управление состоянием соединения на
клиенте
Различные спецификации (Hybi 13)
SSE был бы лучше
39. ЧТО НЕ ТАК С WEBSOCKET
Сложный протокол (если придется внедрять)
Нет сжатия (что-то эксперементальное в
Chrome)
40. ЧТО НЕ ТАК СО ВСЕМИ:
XHR, SSE, WEBSOCKET
Нет мультиплексирования.
Большой запрос тормозит все остальные
Всего 6 доступных TCP соединений.
Каждый API сжирает по одному
41.
42.
43.
44. WEBRTC
2010
WebRTC это API для двунаправленной
передачи текста и бинарного медиа напрямую
между клиентами
45. ОСОБЕННОСТИ
UDP вместо TCP
Текст и банарные данные
Встроенная поддержка медиа данных
peer-to-peer
Обязательное шифрование не-медиа данных
54. ВСЕ ОБХОДНЫЕ МАНЕВРЫ
ЭТО ICE
ICE - interactive connectivity
establishment
Используя STUN и TURN
сервера, он перебирает пары
IP:Port (ICE candidate), по
которым можно подключиться
снаружи
55. И ВСЁ ВМЕСТЕ
1) Нам нужен signaling channel
2) Нам нужен список STUN/TURN серверов
3) RTCPeerConnection поможет создать Offer
и найти ICE кандидатов
4) Всё это нужно передать через signaling
channel другой стороне
5) Через signaling channel мы получим эти
данные от второго клиента