- PVSM.RU - https://www.pvsm.ru -
Около двух лет я занимался веб-разработкой, создавая сайты и веб-приложения на языке PHP. Вот только в веб-разработку я попал по стечению весьма странных жизненных обстоятельств. Не сказать, что мне было это не интересно — мне, как раз, было очень интересно узнать, как создаются сайты и как вообще работает интернет.
Но, в то же время, меня всегда привлекало низкоуровневое программирование. Ещё во время учёбы мне очень понравился язык программирования C++. Только негде было его применять, кроме как для своего развлечения. Дальше я опустился пониже — изучил Assembler. Понял, как работает процессор (хотя слишком поверхностно) и как выполняются программы на самом деле.
Со всем этим набором знаний и опыта я попал в веб-разработку. Всё поначалу казалось весьма и весьма хорошо, оказалось гораздо проще, чем я думал. А со временем приелось, стало слишком просто, неинтересно, нет простора для оптимизаций и интересных решений. Генерируешь веб-странички, пишешь и подключаешь js-скрипты, оформляешь страницы с помощью css. Чувствовал, что больше не развиваюсь как программист.
В то время меня стали мучить вопросы:
С интерпретируемыми языками, конечно, всё понятно. Они очень удобны — не нужно пересобирать весь проект после внесения изменений. При этом все изменения применяются налету, без перезагрузки (остановки) веб-приложения.
Искал ответ на первый вопрос — как писать сайты на C++. В интернете ничего толкового по этой теме не нашёл (только через CGI). И ужаснулся: как же так? Я хочу быть свободен в выборе инструмента разработки, хочу использовать тот язык, который мне нравится. И до сих пор никто ничего не сделал? Или сделал, но использует только у себя?
Это меня и заставило начать разрабатывать свой веб-сервер, где веб-приложения (сайты) подключались бы как библиотеки (*.so, *.dll).
(Во время разработки я прозрел и понял, как правильно использовать HTTP протокол — узнал, что такое RESTful. Узнал, как правильно строить архитектуру веб-приложений. Удивился, какое множество сайтов не соответствуют требованиям RESTful, то есть, фактически, — работают неправильно).
За год работы над собственным веб-сервером (который я пишу на C++ самых модных новых стандартов) мне удалось реализовать все базовые необходимые функции:
Поддержка операционных систем: Linux, Windows
Веб-сервер при старте подключает к себе библиотеки, указанные в конфигурационных файлах. Пример:
server {
listen 2280;
server_name servertest www.servertest;
server_module /media/projects/sites/servertest/module/servertest_release.so;
server_module_update /media/projects/httpserverapp/httpserverapp/bin/Release/libhttpserverapp.so;
root_dir /media/projects/sites/servertest/www/;
request_max_size 10485760;
}
Где,
При подключении библиотеки с веб-приложением происходит поиск функций в ней:
Из описания видно, что application_call — главная функция веб-приложения, точка входа. В неё передаются все заголовки (разобранные по отдельности), данные запроса (URI — идентификатор ресурса (строка запроса), параметры запроса "?var1=sample&var2=1000" в разобранном виде), ссылки на файлы (если переданы), данные веб-приложения (корневая директория). Каждый запрос обрабатывается и выполняется в отдельном потоке (thread).
Особенность в том, что так же передаётся и сокет клиента, с которым можно (нужно) работать напрямую.
Основная работа по разработке веб-сервера, можно сказать, завершена. Уже теперь разработчик может создавать свои веб-приложения на любом языке программирования, компиляторы которых позволяют собирать проект в виде библиотеки. Например, языки C и C++.
Конечно, вам понадобится свой собственный сервер (компьютер), чтобы запустить на нём такой веб-сервер (программу) и насладиться скоростью работы веб-приложений. Помните только о том, что использование базы данных резко снижает производительность любых приложений. Но не столько, чтобы совсем отказываться от использования компилируемых языков.
Исходный код веб-сервера [1] и пример приложения [2] к нему прилагается (используемая IDE — Monodevelop).
Веб-сервер распространяется под лицензией AGPL.
Веб-сервер в рабочем состоянии, но работать ещё есть над чем (привести код некоторых функций в порядок, написать комментарии к коду).
Далее хотелось бы подробнее разобрать и описать структуру веб-приложения, описать с чего начинать разработку, для тех, кому это может быть интересно.
Сейчас пишу фреймворк для удобной разработки веб-приложений на C++ для моего веб-сервера (пока нет в доступе). На самом же фреймворке разрабатываю сайт для одной компании. Обычный сайт — ничего примечательного, но зато с оптимизациями. Использую СУБД MariaDB.
Автор:
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/69567
Ссылки в тексте:
[1] веб-сервера: https://github.com/awwit/httpserver
[2] пример приложения: https://github.com/awwit/httpserverapp
[3] Источник: http://habrahabr.ru/post/236865/
Нажмите здесь для печати.