
[Anonymous]
04.08.2016
14:39:35

Zart
04.08.2016
14:40:01
забудь про джанго-сервер

[Anonymous]
04.08.2016
14:40:22
В смысл?

⬗VLAD⌶K⬖
04.08.2016
14:40:48
фух, быстро получилось

Google

[Anonymous]
04.08.2016
14:41:08
Зарт, можно в лс тогда тебе потравить моз чуть-чуть?:)

Zart
04.08.2016
14:41:16
в лс не надо, это познавательно всем
давайте с азов
что такое вообще веб-приложение?
некий процесс отзывающийся на http-запросы в более-менее общем случае

[Anonymous]
04.08.2016
14:42:04
Сервак, апи для обработки запроса

Zart
04.08.2016
14:42:49
поначалу у нас существовали простенькие веб-сервера, которые хавали реквест, транслировали его в путь на диске и возвращали файлик
чтобы сделать вывод более динамичным был изобретён протокол CGI. суть которого сводилась к тому, что веб-сервер разбирал реквест, заполнял его деталями переменные окружения и запускал процесс, потом возвращал вывод этого процесса в сокет наружу

[Anonymous]
04.08.2016
14:44:26
Угу

Bulat
04.08.2016
14:44:52

Zart
04.08.2016
14:45:05
это всё работало, но страшно медленно, поэтому быстро запилили всякие серверные механизмы ака SAPI - NSAPI, ISAPI, вот это всё. чтобы всунуть обработку данных сразу в сервер для скорости
так же всё это дело развивалось и у нас появились промежуточные агенты - прокси, мидлвари
вещи, которые могут сидеть между конечным юзером и сервером и общаться по хттп в обе стороны. или не обязательно по хттп в одну из сторон - так родились AJP, FastCGI, SCGI и прочая

Google


Zart
04.08.2016
14:47:25
так же шел процесс разработки того как собсно веб-сервера работают внутри с собственно сетью - это и развитие апи на уровне ос - STREAMS, BSD Sockets, Apple Sprockets, WinSock
когда сокеты победили примерно везде, продолжилось развитие механизмов обработки событий от сокетов - select, poll, epoll, kqeueue, IOCP
так же у нас появились самые разные архитектуры построения сетевых приложений - пре-форк, когда сервер создает стопиццот своих копий, каждая из которых слушает единый сокет, и по прилёту входящего пакета ос шедулит один из процессов, который хватает работу на себя
многопоточные модели - примерно так же, но с потоками вместо форка
вариаций много - 1:1 - когда на каждый реквест по потоку (популярно было в зеленых потоках явы), пул потоков - более популярный вариант нынче, когда работу выполняет один из свободных потоков, а потом ждёт новой работы
асинхронные модели - когда вся работа делится на много-много мелких кусочков, каждый из которых может быть выполнен в конечное время, а операции I/O отданы на откуп системе, и позволяют избежать ожидания их завершения
переходим конкретно к питону. поначалу разумеется поддерживался лишь цги, как универсальный интерфейс на тот момент. с тех пор в питоне всё еще живы модули cgi и cgitb
потом случились meduza и zope
медуза была одним из самых ранних асинк фреймворков в питоне. asyncore и asynchat - это фактически выдранные от неё мелкие кусочки, дожившие до наших дней
я даже видел комментарии той эпохи в ядре сервера waitress 8)
хм... хотя асинк фреймворк был еще тогда, популярности он особой не имел, появившийся позже твистед сорвал все лавры
зопа была одним из первых апп серверов и приобрела приличную популярность в тырпрайзе так как хорошо интегрировалась с тогдашними системами аутентификации, предоставляла очень гибкую схему разработки и безопасности
в те годы начал набирать популярность и пхп, который довольно быстро был перепилен как модуль к апачу
для перла и питона были созданы аналогичные модули mod_perl и mod_python, которые вшивали эти языки прямо в апач, что позволило писать веб-приложения на этих скриптоязыках
хочу отметить что апач до 2.х был строго префорковым, т.е. вся обработка запросов внутри была строго синхронной
и примерно к этому моменту рождается и джанга
изначально она использовала модель хэндлеров - т.е. в зависимости от того к какому серверу надо было прикрутить - создавался экземпляр нужного обработчика - для мод_питона был свой, для фастцги - своё, и чтото еще было
суть всего фреймворка сводилась к тому, чтобы создать объект реквест - подобрать для его обработки нужный вью/контроллер/зовите-как-хотите, а результаты вернуть в веб-сервер
всё это происходит строго по очереди и к моменту возвращения респонса у тебя весь вывод должен быть сгенерирован
поэтому джанга как таковая - синхронна
и должно быть очевидно почему
потому что сервер будет ждать пока фреймворк не сгенерит всё, он не может вернуть клиенту ответ "ща, погоди, тут сперва один воркер повкалывает слегка, потом второй"

Google

Zart
04.08.2016
15:04:41
к тому времени накопился зоопарк веб-серверов и приложений, и web-sig коллективным разумом родил PEP-333, стандарт WSGI, который декларирует как приложение на питоне должно выглядеть, чтобы его мог вызвать сервер
за основу был взят CGI, плюс туда вшили несколько дубовых вещей, для поддержки тогдашних фреймворков
этот спек совершенно не учитывал никакой асинхронщины, плюс ряд вещей в нем осталась без освещения вовсе - те же чанкед респонсы для стриминга, 100 continue ответы...
часть этих проблем всплыла сильно позже, и спек был обновлен - теперь это PEP-3333, в котором в основном поправили информацию о юникоде/байтах и частично про обработку ошибок. но с асинком там по прежнему глухо

[Anonymous]
04.08.2016
15:08:23

Zart
04.08.2016
15:08:27
джанго эволюционировала, сперва в ней появился всги хендлер, наподобие предыдущих
в последних релизах те старые ошметки были вынесены окончательно
разделение на процессы чего?

[Anonymous]
04.08.2016
15:09:20
Ну, создание реквеста, обработка урла, обработка в вьюхе
Как ты говорил

Stanislav
04.08.2016
15:09:38
Слышь че, а если писать маленькую анонимную борду типа двача, то что шустрее?
Фласк?

Zart
04.08.2016
15:09:52
то что знаешь ;Р
хоть на голом всги

[Anonymous]
04.08.2016
15:11:08
Мистер твистер не согласился бы лепить на голом всги(:

Stanislav
04.08.2016
15:11:09
Джанго слишком громаден

Zart
04.08.2016
15:11:26
в общем есть деление - веб-сервера занимаются тем что рулят сокетами - читают и отвечают хттп-запросы в них
чтобы получить ответ они либо возвращают файлы с диска, либо пересылают запрос дальше (проксируя), либо вызывают приложения (или уже являются ими)

[Anonymous]
04.08.2016
15:11:28
Зато всё за тебя:)

Марк
04.08.2016
15:11:45

[Anonymous]
04.08.2016
15:12:04

Zart
04.08.2016
15:12:36
джанго же с другой стороны этой кухни - сервер создал процесс, поток в нем, инициализировал там питон, сгенерил питоновый дикт с инфой о запросе - дальше уже фреймворк работает на стороне питона

Марк
04.08.2016
15:12:46

Google

Bulat
04.08.2016
15:13:09
zart спасибо за историю :)

Марк
04.08.2016
15:13:25
На борде у тебя небольшое количество роутов.
Джанго нахуй

Zart
04.08.2016
15:13:40
причем джанге не передается никаких реакторов/ивент лупов - т.е. она не может йелдить ожидание

Stanislav
04.08.2016
15:13:40
Фласк самое то, имхо
Я юзаю джанго для написания форума, довольно большого
А фласк учу как хобби, буду маленькие сайтики пилить)

Марк
04.08.2016
15:14:13
Да там и учить то нечего. Берешь и пилишь что нужно

Zart
04.08.2016
15:14:31
в роли примера интегрированного сервера/фреймворка можно посмотреть на черрипай
еще можно посмотреть на аспен и быстро закрыть глаза 8)

[Anonymous]
04.08.2016
15:15:16
Окей, спасибо за время ахуенных историй:)

Admin
ERROR: S client not available

⬗VLAD⌶K⬖
04.08.2016
15:15:50
на одного миллионера стало больше)

Zart
04.08.2016
15:16:07
а вот асинковые веб-сервера у нас представлены в первую очередь фреймворками - твистед, гивент, конкурренс, асинкио/троллиус, торнадо

Stanislav
04.08.2016
15:16:07

Zart
04.08.2016
15:16:38
к ним есть и веб-фреймворки, заточенные конкретно под асинк - twisted.web2, nevow
насколько оправдано на них чтото клепать я не знаю..
эту нишу уверенно сожрала нода

Sergey
04.08.2016
15:18:07
не все знают js, а от асинка может быть свой профит

Zart
04.08.2016
15:18:14
жс резко легковеснее, с довольно хитровыебанным джитом и ивент луп ноды отлизан до блеска
в роли альтернативы можно посмотреть на наш отечественный тарантул, или поебаться с луа интеграцией нгинкса

Sergey
04.08.2016
15:19:27
у жс много минусов вроде идиотского приведения типов

Google

Zart
04.08.2016
15:19:35
у всех этих подходов есть и плюсы и минусы, какие перевешивают - дело сильно индивидуальное

Sergey
04.08.2016
15:19:37
отстутсвия классов и кучи всего еще)

Zart
04.08.2016
15:19:45
но срачи можно раздуть вполне эпичные 8)
бери тайпскрипт и радуйся жизни

Sergey
04.08.2016
15:20:07
мы тут в комнате регулярно срачи устраивает python vs js vs php))

tosh
04.08.2016
15:20:21

Zart
04.08.2016
15:20:27
единственные плюсы пыха - это дешевизна и простота в деплое

Sergey
04.08.2016
15:20:27
в физической, в смысле

Zart
04.08.2016
15:20:49
по всему прочему - перечитывать https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ до полного просветления

Sergey
04.08.2016
15:21:12

Zart
04.08.2016
15:21:46
часть этого бобра позже войдет в экму

Sergey
04.08.2016
15:22:34
ну я жс совсем плохо знаю

Марк
04.08.2016
15:22:39

Zart
04.08.2016
15:22:47
ну да
натянули примитивный шаблон на апач 8)

Sergey
04.08.2016
15:23:02
хотя нынче все хипстеры уехали на golang) js уже не моден

Zart
04.08.2016
15:23:31
я уже вижу боевые репорты хипстеров, возвращающихся с голанга обратно в питон

tosh
04.08.2016
15:23:41

Zart
04.08.2016
15:23:48
поGOляли и хватит
даааа... нпм - сцуко, сказка
думаю все в курсе последнего отсоса нпм в глобальном масштабе?
Эта группа больше не существует