Step 6 (S-44901)

From Stepik Wiki
Revision as of 14:45, 6 August 2017 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14835/step/6

Step 6 (S-44901) 1.png

[00:00 - 00:15] конец завершение урока мы рассмотрим 4 технологию а это современная технология то с она появилась в браузерах недавно а называется технология вот этой технологии она призвана


[00:15 - 00:34] решить проблему он стоял там сообщениями накормил она предоставляет а в javascript api для создания полноценных сетевых соединений а это вот 100 соединения по всему функционалу они валентность практически валентность себе да


Step 6 (S-44901) 2.png

[00:34 - 00:51] использование в протоколе в сокеты используется специальный механизм апгрейда соединений а что это значит а это значит что в соединении а это не отдельный сетевой протокол это расширение протокола http скажем замену


[00:51 - 01:07] а вот солнце день начинается как обычная t соединения то есть клиент отправляет на сервер а открывать и соединения отправляет запрос то есть вот этот сервер


[01:07 - 01:23] он должен работать как а сервер по крайней мере на старте разобрать запрос и обновить протокол а этот запрос особого вида в нем есть специальные заголовки в том числе заголовок апгрейд


[01:23 - 01:39] заголовок апгрейд указывает что нужно сменить протокол по которому передаются данные в данном сетевом соединении а в этот момент в обсервер может принять решение


[01:39 - 01:58] хочет общаться с клиентом по протоколу либо не хочет проверить авторизацию если все ок он отдает специальный код ответа 101 говорили что с единице начинаются информационные коды в том числе 101 свитч протокол это означает что


[01:58 - 02:15] сервер согласен сменить протокол и отдается а набор заголовков в том числе апгрейды вот эта фаза называется рукопожатием handshake а рукопожатие по сути дела


[02:15 - 02:31] теперь мы можем сказать что хорошо работает вполне все по протоколу http однако после того как хорошо быть завершен следующие данные передаются уже протоколов обсохнет


[02:31 - 02:46] а это бинарный протокол он позволяет передавать данные в виде так называемых фреймов то есть а фрагментов заранее указаны длины а


[02:46 - 03:02] то есть он не человекочитаемый протокол бинарный у каждого фрейма есть заголовок есть собственная передаваемые данные поэтому мы говорим что после того как произошел хорошо у нас происходит смена протокола называемой апгрейд


[03:02 - 03:20] давайте подробнее посмотрим как выглядит хэндшейк в протоколе а на данном снимке показан пример а запроса и ответа так


Step 6 (S-44901) 3.png

[03:20 - 03:37] строка запроса в данном случае он играл у нас слэш чат а хвост это стандарт и заголовок а остальные заголовки специфичны для shake


[03:37 - 03:55] заголовок апгрейд заголовок апгрейд говорит о том что соединение нужно обновить а значение скалу апгрейд а говорит на какой протокол мы меня то есть вместо теперь будет использоваться другой протокол например вот соки


[03:55 - 04:13] заметим что заголовок есть и в ответе и запрос запрос и в ответе то есть и клиент и сервер они должны договориться до того как мы какой протокол они а меняют теперь то есть до какого протокола не обновляются


[04:13 - 04:32] если они не договорились соединения просто будет закрыта а заголовок connection апгрейд по поводу заголовка connection а часто люди неправильно представляет в чем его смысл заголовок connection говорит какие а


[04:32 - 04:51] такие заголовки нужно убрать при проксировании запроса дело в том что заголовка это так называемый а peer to peer заголовок смотрите допустим у нас есть какой то клиент клиент есть какой то сервис


[04:51 - 05:10] а есть какой то прокси серверов ты с промежуточной серой сервер может быть вне зависимости от желания разработчика и самого клиента например провайдеры и установил запрос проходит через него и проксируется в результате у нас есть 2


[05:10 - 05:25] tcp соединения от клиента до proxy соединения 1 и от прокси до нашего сервера а когда сервер возвращает клиенту


[05:25 - 05:42] какие то заголовки запроса либо клиент передает серверу заголовки делится на 2 вида а заголовки и content length and ты заголовки которые будут передаваться


[05:42 - 06:01] насквозь через все прокси сервера ну например content type content тип документа он не зависит совершенно не нет каких прокси серверов а есть заголовки пир тупит


[06:01 - 06:18] а например с голубками а peer to peer заголовке специфично для конкретного и соединения например а вот соединения от клиента


[06:18 - 06:35] до proxy может быть просто по протоколу 1 1 to a proxy до серверов и протокол 1 0 это вполне нормальная ситуация вот это 1 соединение может быть персистентной а 2 может быть неприятности


[06:35 - 06:53] совместно заголовок connection указывает такие заголовки нужно убрать в данном случае при проксировании будет заголовок апгрейд а теория красивая а но для протокола это означает фактически поломку


[06:53 - 07:09] то есть а невозможно преобразовать протокол в обслуге так чтобы здесь а сокета здесь было что то другое так работать не будет


[07:09 - 07:24] мы поговорим а еще в конце то есть фактически если у нас на усохнуть соединении появляется какая то прокси и прокси недостаточно умна чтобы повторить во в соке соединения к серверу


[07:24 - 07:42] а произойдет ошибка но тем не менее заголовок заголовок апгрейд он кстати а заголовок connection открыт он убивает заголовок апгрейд и предостерегает нас от неправильной передачи данных на самом деле а окей


[07:42 - 07:59] а дальше мы видим 4 заголовки которые относятся вообще исключительно а протокола заголовок выходит ориджен а это аналог заголовка обычного заголовка region про которые мы говорили


[07:59 - 08:18] на прошлом уроке он позволяет серверу а делать но разрешать кросс доменные запросы то есть показывает серверов а с какой страницы к нему пришел запрос на соединение


[08:18 - 08:36] а этот протокол а смотреть в обслуге предоставляется протоколу сокета просто передача формат передачи данных в виде некоторых фреймов а что именно через него будет продавать а передаваться это большой вопрос то есть это зависит уже от разработчика


[08:36 - 08:54] приложения а с помощью этого заголовка браузер может передать серверу что именно он ожидает каком виде он ожидает передача данных через веб сокеты но на практике просто а


[08:54 - 09:12] клиент сервер сайта не согласованно так чтобы работать по 1 протоколу указывается версия а версия протокол на данный момент актуально 13 если на сервер приходит эта версия меньше 13 может оказаться работать


[09:12 - 09:30] и наконец специальный ключ высоки а клиент здесь передает случайно сгенерированный строчку на что сервер должен ответить специальные строкой которая считается по простым правилам то есть


[09:30 - 09:49] в строке клиента добавляется соль от не вычисляется хэш сумма и возвращается а зачем вот это мужики и акцепт эти заголовки а решают небольшую проблему с кэшированием запросов то есть они гарантируют что


[09:49 - 10:06] никакой прокси сервер не закэширует вот этот а шейк и что я действительно будет ну собственно говоря сервер отвечает протокол что он согласен вот использовать протокол чат


[10:06 - 10:21] важный момент код ответа 101 свич таким образом работает еще раз вкратце


[10:21 - 10:39] что здесь важно а важно что есть заголовок апгрейд он указывает на новый протокол важно что серверов отвечает апгрейд тот же самый заголовок важно что код ответ 101 и а важно что


[10:39 - 10:58] продаются специальные заголовки которые должны протоколов об сокетом согласоваться например вот ключ должен согласовать с акцептом протоколы должны согласовать между собой а произошел обмен соединениями


[10:58 - 11:15] ну произошел обмен вопросам ответам по данному типу соединения будут передаваться же данных бинарном виде так а теперь посмотрим как вот как выглядит а пиво соки то на стороне клиента


Step 6 (S-44901) 4.png

[11:15 - 11:34] а на стороне клиента то есть браузеров java скрипте создается с помощью нового объекта есть специальный объект типа of selected создается так этот и указывается некоторый угол а заметьте что


[11:34 - 11:49] в протокол п а в час начинаться это будет что то шейка но протокол по умолчанию это также 80 порт


[11:49 - 12:07] помимо вот есть еще в сс востоке ну то есть секс то поверх это tps 443 порт окей а сначала создается объект солят


[12:07 - 12:25] а после чего у сокета создаются специальные коллбэки какие есть коллбэки call back off open water on эта функция которая будет вызвана в момент когда соединение установлено


[12:25 - 12:45] он вызывается в момент когда соедини по соединению пришли какие то и on clothes вызывается когда соединение закрыто закрыто


[12:45 - 13:04] а здесь мы рассматриваем простой пример мы рассматриваем а не доставку сообщений а эхо сервер и эхо клиент что делает что делает данный клиент смотреть функции он копан пишем в лог


[13:04 - 13:19] ну просто информацию в debug debug консоли в браузере по нажатию кнопки в 12 вы можете сообщение увидеть далее мы а


[13:19 - 13:36] некоторое сообщение а здесь важно помнить что по протоколу в обслуге передаются просто сырые данные а они могут быть текстовым или бинарными но это небольшая разница на самом деле а


[13:36 - 13:53] разница существенная то что не будет с реализовать и 10 сдавать данные за вас поэтому вам нужно это сделать руками мы используем специальный а специальные методы сон


[13:53 - 14:08] которые переводят структуру то есть объект скриптовый вот а в строку содержащую jesaul эту строчку мы отправляем с помощью вызова с все


[14:08 - 14:24] когда он ответит произойдет вызов коллбэка он мелочь а в этот колбэк передается специальный объект событие событие есть атрибут дата а


[14:24 - 14:41] атрибут дата это собственно те данные которые были переданы вот само сообщение сообщение является строкой содержащей джисон поэтому с помощью метода just on parts мыло преобразует структуру респа тоже объекты мы можем


[14:41 - 15:00] собственно говоря обратиться к свойствам здесь мы получим вот то что отправляет видите api сделал догам для программиста то есть позволяет задать функций обработчиков и с помощью простейших функций


[15:00 - 15:16] типа send отправлять данные ничего лишнего а в отличие от клиента на стороне сервера все несколько сложнее начнем с того что не существует такого понятия как уже готовый


Step 6 (S-44901) 5.png

[15:16 - 15:34] как правило это а некоторые библиотека для языка программирования то есть для разных языков программирования существуют специальные библиотеки для создания высоких серверов


[15:34 - 15:49] а в частности здесь приведен простейший пример для языка python и использован фреймворк торнадо торнадо фреймворк event webserver которая позволяет создавать на языке python


[15:49 - 16:07] а простейшего ну не простишь вообще довольно разнообразной сервера то есть мы говорили что когда мы обсуждали разные виды сыров говоришь то есть такие звери как а сервера но написанный на языке высокого уровня вот торнадо


[16:07 - 16:26] это как раз таки хороший пример то есть это иван сервер написанный на языке python он позволяет обрабатывать протокол http и куча других в том числе сотен а обработчик скелет


[16:26 - 16:44] сервера выглядит следующим образом это отдельный класс в котором есть методы ну довольно похоже на сам держал скрипте были коллбэки здесь метода метод open будет вызван когда соединение будет открыта


[16:44 - 17:00] метод будет вызван а когда придет какое то сообщение от клиента и с помощью методов right меня слышишь мы можем отправить а ну поскольку мы можем видеть что он меня слышишь


[17:00 - 17:18] фактически принимают некоторые сообщение тут же отправляет назад так ведет себя эхо серверов то что получу а это пример реализации абсолютно а если мы хотим решать


[17:18 - 17:32] с помощью технологии задачу доставки сообщений нам придется написать довольно большое количество кода самостоятельно в частности нам нужно будет а завести какой то реестр о соке то есть запоминать


[17:32 - 17:49] а какой номер канала соответствует какому сокету по нам нужно будет реализовать внутренний интерфейс и нам нужно будет при добавлении сообщения выбирать правильные соки отправлять через него данной то есть задача на самом деле


[17:49 - 18:07] и тем не менее несмотря на все это это протокол набирающие популярность а я думаю что в будущем будет разработана удобная библиотека для работы с ним и все


Step 6 (S-44901) 6.png

[18:07 - 18:25] все входные такие решения как кормят и server push они останутся в прошлом какие плюсы минусы есть у протоколу bsod а + технического характера это минимальный объем трафика поскольку у нас


[18:25 - 18:41] протокол описывает работает а это бинарный протокол то каждому сообщению каждому фрейму добавляется а там 8 12 байт заголовка это небольшое степи заголовок 8 12 б


[18:41 - 18:57] а поскольку это бинарный протокол он довольно простой его легко парсер то есть низкая нагрузка на сервер 2 преимущество нагрузка на сервер после того как соединение уже установлено а следствии этого поддержка большого числа пользователей ну


[18:57 - 19:15] здесь принципиальных отличий от корня сервера нет то есть при использовании а при использовании фреймворка что необходимо для для таких решений а мы сможем поддерживать большое количество


[19:15 - 19:31] пользователя одновременно ну наверно чуть больше чем технология комнат просто потому что нагрузка меньше а соединения фулдуплекс как мы видели через установленное соединение данные можно предпринимать так отправлять


[19:31 - 19:49] а это позволяет использовать за в соке то удобно при программирования разных рот разного рода игр и а приложение которое нужно максимально быстрое взаимодействие то есть время доставки будет минимальна за счет того что нас


[19:49 - 20:08] а не используется не приходит сам создавать запросы теперь отрицательные стороны поддерживается не всеми браузерами на данный момент а ну то есть на данный момент уже всегда не будет поддержки


[20:08 - 20:25] internet explore меньше 10 опера не поддерживает и старой версии android браузера но они стремительно уходит в прошлое и новый браузер они уже все идут с поддержкой протокола а сейчас


[20:25 - 20:40] это где то процент либо 2% аудитории если говорить там про рунет процент 2% стоя у которых не будет работать в абсолют а 2 проблема требуется специальный веб сервер


[20:40 - 20:55] да требуется но это не велика проблема если нужно разработать а действительно сложную систему то есть я за цену придется заплатить наличие сервера может он позволяет


[20:55 - 21:11] а более точно решать некоторые проблемы то есть вам будет проще решать некоторые возникающие проблемы этом более гибкой и 3 проблема которая есть плохо работает с прокси серверами


[21:11 - 21:29] а да прокси сервера которые иногда стоят на пути от клиента к серверу должны уметь проксировать протокола сотен на сегодняшний день не все прокси серверами это делать


[21:29 - 21:48] по нашей статистике где то 5% пользователей обращаются к web серверам из а из за всякого рода proxy а скорее всего это интернет кафе и подобные заведения и для этого процентов протоколов в шоке от работать не будет


[21:48 - 22:06] но здесь есть обходной путь ну во 1 со временем их число будет только падать а во 2 есть протокол secure поскольку это шифрованное соединение то если мы используем высоких secure


[22:06 - 22:23] прокси сервер вынужден работают как прокси p потока а он не имеет возможность проанализировать содержимое поэтому протокол secure то есть в поверх а у вас будет работать для всех пользователей


[22:23 - 22:38] это в принципе вполне решает проблему с учетом того что t last на сегодняшний день на сегодняшний день становится дефакто стандартом для приложения то это проблемы она небольшая итак


[22:38 - 22:57] что можно завершении сказать а данного урока а для обеспечения реалтайм сообщений нормального качества отправь сообщение нам нужен специальный сервер который будет одновременно поддерживать большое количество соединений


[22:57 - 23:14] а сегодняшний день есть 2 актуальные технологии это кормят и в от сокета в случае с комитом а есть готовое решение например гиггз + мод а которая выступает в роли сервера


[23:14 - 23:25] в случае необходимо использовать библиотеку а на каком то языке программирования и создать свой сервер