Step 3 (S-44753)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14825/step/3

Step 3 (S-44753) 1.png

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


[00:16 - 00:33] сетевые соединения также работают в цикле а здесь на слайде представлен упрощенные цикл работы а воркер начинается цикл сверху


[00:33 - 00:49] чтение о житии запросов предполагается что воркер получил с помощью системного злаков а новой сетевой соединении с кем то конкретным клиентом а цикл начинается с того что читает из этого соединения


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


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


[01:22 - 01:39] определяется на основе заголовка host если мы говорим и 1 1 либо на основе домены которые есть в урле а после того как выбран виртуалхост выбирается так называемый локейшен


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


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


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


[02:26 - 02:42] права доступа то сможет ли он отдать этот факт проверка прав доступа она состоит из нескольких частей во 1 сервер можно задать определенные правила по ip адресам каким клиентом можно отдавать


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


[03:00 - 03:15] после того как мы проверили и у нас есть доступ если доступа нет мы пропускаем пропускаемых стадия


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


[03:30 - 03:45] в общем мы считаем что будет с чипом файл с диска применяя различные выходные фильтры что такое выходные фильтры ну в частности например сжатию gzip а либо отправка документов по частям


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


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


[04:19 - 04:35] когда мы отправили файл производится запись слог слог с записывается а различно информацией мы отправили файл какой отправили файл а документ


[04:35 - 04:50] а документ какой отправить документ с каким кодом ответа то есть это был 200 ответ либо документ был не найден 404 а и прочей информации после чего


[04:50 - 05:05] происходит очистка внутренних структур которые мы выделяли очистка памяти и цикл повторяется а каков цикл работа воркер процесса


[05:05 - 05:20] следующее что нужно поговорить это про модульная архитектура в чем тут дело в принципе можно написать как единое целое приложение


Step 3 (S-44753) 2.png

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


[05:38 - 05:58] изменения кодовой сервер его делают модуль что то значит а это значит что внутри сервера выделяется ядро ядро сервера отвечает за чтение отвечает за ввод вывод данных то есть за чтение запроса за отправь


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


Step 3 (S-44753) 3.png

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


Step 3 (S-44753) 4.png

[06:35 - 06:51] лот модуль с помощью которой можно загрузить а шервуд библиотеку shared library а либо они могут быть скомпилированный код сервера случае санги с это так то есть вам необходимо


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


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


Step 3 (S-44753) 5.png

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


[07:39 - 07:57] ищу сервера с помощью радиус специальный unix серверов для проверки доступа а проверку доступа по логину паролю можно проверять с помощью похода в базу mysql


[07:57 - 08:15] либо в полоцк раз какую то табличку а проверка можно осуществлять на основе там эти адреса а представишь нас есть 3 модуля при старте сервера


[08:15 - 08:31] ибо при компиляции ну за зависит от того динамической не включается или нет а эти модули регистрируют свои функции как обработчики на определенный этап


[08:31 - 08:50] данного цикла когда ядро сервера доходит до данного этапа оно вызывает а все 3 обработчика передавать специальные объекты ну то есть в процессе в процессе годового цикла у нас сервера как правило существуют объект запроса


[08:50 - 09:06] некоторое request он из себя представляет просто разок структура в памяти которая содержится вся информация про текущий запрос погода обладая запроса модули могут выполнить


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


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


[09:38 - 09:57] модули могут быть как простыми которая работает на каком то 1 этапе так более сложными например есть так называемый все этот модуль позволяет а


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


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


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


Step 3 (S-44753) 6.png

[10:50 - 11:08] не сможет запуститься примеры модулей которые можно говорить а например а этот модуль занимается определением типа то есть content type документах исходя из его


[11:08 - 11:23] расширение то есть суффикса файла my magic делает тоже самое но исходя из 1 байт документа то есть пытается по сигнатуре документа определить его тип


[11:23 - 11:38] а яндекс при запросе если вообще понимает что запрос идет них файла какой то директории windows сможет сгенерировать мл страничку содержащую список файлов


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


[11:57 - 12:16] а этот модуль мы поговорим еще а его нету а нет он был очень популярен суть этого модуля заключается в том что вместо


[12:16 - 12:33] отдачи какого то конкретного файла обработает на этапе чтения отдачи файлов вместо отдачи просто файла этот файл запускается и генерировать динамическую страницу то есть мод работает как способ запуска динамических страниц мод


[12:33 - 12:51] мой 1 отпуск был пример с языком представляет возможность писать скрипты к апачу на языке 1 этап обработки запроса делает более простое


[12:51 - 13:07] простую работу сжимают сжимают документ то есть э добавляют zip сжатия а итак что есть важно понимать что у вас есть ядро


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


[13:25 - 13:33] который позволяет вам самостоятельно написать модуль и расширять функционал сервер таким образом