Step 7 (S-44772)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14826/step/7

Step 7 (S-44772) 1.png

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


[00:17 - 00:35] а современный подход к запуску приложений а состоит в том чтобы приложение запускалось а в 1 процессе вместе с плетешь он серого а и аппликейшн сервер как правило в отличие от старых подходов


[00:35 - 00:52] реализован на том же языке что и само приложение и собственно говоря никакие другие приложения запускать не может то есть 1 язык 1 сервер а давайте рассмотрим протокол вес этот протокол специфичен для языка python


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


Step 7 (S-44772) 2.png

[01:11 - 01:28] при запуске приложения это приложение запускается сервер обработчик приложение представляет из себя функцию


Step 7 (S-44772) 3.png

[01:28 - 01:45] вот пример обработчик а 1 обработчик это 1 функция а все аргументы и что снится возвращает они строго фиксированное и в этом состоит суть а протоколов sg итак


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


[02:03 - 02:18] аргумент 1 аргумент а название может поменяться это словарь в котором содержатся все переменные окружения а


[02:18 - 02:34] в случае переменной окружения передавались через стандартный механизм переменных операционной системы случае вес же это просто обычные слова то есть а


[02:34 - 02:49] словарь а тем не менее ключи то есть название назвали этих переменных они в большинстве своем совпадают с тем что было протокол


[02:49 - 03:07] 2 аргумент это специальная функция здесь называют старт response она нужна для того чтобы начать ответ а отправили в заголовке клиенту на каждый запрос на сервер вызывают


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


[03:25 - 03:43] а здесь происходит какая то бизнес логика то есть здесь располагаются вызов кода вашего приложения приложение скорее всего будет использовать переменные окружения чтобы а


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


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


[04:21 - 04:38] а в питоне функции являются такими же переменными как строки числа и можно передавать 1 функцию внутри другой вот мы передали что сервер передал на функцию стал 3


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


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


[05:10 - 05:26] а поэтому предполагается что в сг приложение будет возвращать а нечто почему можно интегрировать то есть и terrible в простейшем варианте эту список ну а у нас тела а тело ответа


[05:26 - 05:42] это небольшая строчка поэтому мы просто помечаем ее внутрь списка возвращаем список из 1 элемента который является телом ответа а аппликейшн сервер после того как произошел возврат


[05:42 - 05:58] сгоняй за этой функции а он получил вот этот список и насчет его постепенно передавать клиенту а в нашем случае у него передаст сразу потому что здесь всего несколько там


[05:58 - 06:15] ну а если мы допустим знаем какой то файл handle а придешь сервер будет постепенно читать и передавать ответ по частям а вот


[06:15 - 06:33] вот фактически весь а вот фактически как бы весь протокол лежать заключается в этом можно еще раз повторить его особенности обработчик протоколе визжа эта функция либо класс что то что


Step 7 (S-44772) 4.png

[06:33 - 06:50] с точки зрения языка python является взываю callable метод запроса query string заголовки передаются через окружение только в отличие от сержанта не системной переменной окружения специальный словарь


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


[07:07 - 07:23] тело запроса передается через специальный файл handle с именем wise guy in тут а это 1 из переменных в словаре 2 то словаре есть специальная переменная с именем взгляд и input


[07:23 - 07:39] значением а файлу file файл скрипта из которого можно прочитать тело intel вопрос а кот ответы заголовки передаются точнее возвращаются в аппликейшен сервер


[07:39 - 07:57] через вызов а функция я передаем код ответа и заголовки ответ тема ответа возвращается в виде списка либо чего то почему можно оперироваться terrible из обработчика


[07:57 - 08:14] а поток ошибок должен быть направлен в специальный файл handle которая передается с именем войска стр через через словарь с окружением


[08:14 - 08:30] как мы видим протокол довольно простой какие переменные окружения передаются в словаре во 1 в передается большинство подобных переменных окружения сиджея like


Step 7 (S-44772) 5.png

[08:30 - 08:46] request uri и все тому подобное для того чтобы а для того чтобы можно было следовать объем запрос кроме эту передаю специфичные для протокола в фильме пример а


[08:46 - 09:04] вешал содержит версию протокола то что ваше приложение маршрутам знать с каким протоколам оно работает а войска и рфпл схем текущая схема запроса 6 p p s


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


[09:22 - 09:39] приложение запускается внутри мультитран этот сервер а это нужно бывает нужно знать предложение если оно использовать какие то нет save операции


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


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


[10:15 - 10:31] а давайте посмотрим как происходит взаимодействие сервера и а


Step 7 (S-44772) 6.png

[10:31 - 10:50] в типичной схеме развертывания у нас уже спускаются 2 процесса фронта 2 процесс этот сервер который взаимодействовать с вашим предложением по протокол возглавил


[10:50 - 11:09] взаимодействие между фронтенд и бэкенд идет по протоколу http то есть наша плетешь он также является простейшим может разобрать протокол http в некоторых случаях вместо протокола http используются бинарный протокол


[11:09 - 11:26] протокол us guys этого несколько ускоряет работу но это не специфично а тут важно понимать что это а описание вызова внутри сервера то есть


[11:26 - 11:42] войска записывает вот этот вызов аппликейшен сервак непосредственно к вашему приложению итак а вот серверов взаимодействовать сопляки сервером по протоколу http аппликейшен сервер сконфигурирован так что он знает


[11:42 - 11:57] какое твое приложение а он использует протокол войска и для его запуска все что находится ниже от этой черты с точки зрения аппликейшен сервера является приложение


[11:57 - 12:14] фактически здесь может располагаться ваш пол то есть а вы можете оформлять свое приложение в виде набора таких в израиль а аппликейшн в то есть таких вот хэндлер можете писать несколько хантеров можете писать 1 а


Step 7 (S-44772) 7.png

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


Step 7 (S-44772) 8.png

[12:33 - 12:49] работает а скорее всего ваше приложение должно быть проанализировать переменную puss in for и выбрать а конкретно обработчик а делать то что


Step 7 (S-44772) 9.png

[12:49 - 13:06] современного приложения они состоят из огромного количества слов них большое количество разных действий страниц а есть 2 варианта либо на каждое такое действие можно создавать отдельное приложение


[13:06 - 13:20] и настроить аппликейшен сервер так чтобы для разных урлов вызывали с разные приложения либо можно использовать а обновы приложение но тогда оно внутри себя должно решать какую именно функцию в бизнес логике вызвать


[13:20 - 13:37] чтобы решить часто используется путь которая есть человек который был в орле так называемые а ну он содержится в переменной path info вот этот путь нужно проанализировать и выбрать какой то приложение этот процесс называется роутинг урла


[13:37 - 13:53] то есть сопоставления конкретно о происходящих в урла конкретной функции а вашего приложения это называется а путенг и его нужно осуществить далее а


[13:53 - 14:11] все протоколы начиная с java и до выезжают они а не анализирует содержимое заголовков то есть э входящая в степи заголовки передаются просто как целые строки а тем не менее у многих заголовков есть внутренняя строки


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


[14:27 - 14:45] а то есть а приложение должно заниматься анализом конкретных заголовка для того чтобы учить get параметра то есть какие то параметры запроса нужно разобрать переменную во всех протоколах она также передается как просто строка


[14:45 - 15:02] то есть это строка вида там а равняется 1 б равняется 2 чтобы получить значение конкретно в переменных вам нужно разделить распарсить причем напомним что значение


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


[15:19 - 15:34] а на отдельные параметры причем а существует 2 варианта если нас передается формате вводить в формула года то есть это обычное отправка форм


[15:34 - 15:49] примерно происходит также как парсинг однако если форме загружаются какие то данные какие то файлы тело запроса будет формате в мультиплатформе


[15:49 - 16:05] его распарсить намного сложнее то есть формат более сложно а это также должна делать ваше приложение кроме того вывод правильно заголовков


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


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


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


Step 7 (S-44772) 10.png

[16:57 - 17:13] это библиотека которая работает между аппликейшен сервер непосредственно вашей бизнес логику фреймворке собственника решают все перечисленные проблемы они обеспечивают более


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


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


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


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


[18:21 - 18:33] орг называемый джанго вот на этом собственно говоря все