Написание Web-сервера под Linux на С/С++
Появилась необходимость создать Web-сервер как тестовое задание для принятия на проект.
Ранее я писал что-то подобное, но под WIndows(C#+JavaScript/jQuery+ASP.NET), но теперь меня перебросили на Юниксовый проект и дали тестовое задание. Что-то из реализации частично я нашел в книге "Марк Митчелл и др., Программирование для Linux. Профессиональный подход", но чтобы реализовать полный функционал, этого не достаточно.
Может какая есть литература, где был бы подробно описан процесс создания такого Web-сервера? Или кто-то может сталкивался с подобной задачей?
Весьма буду благодарен любой помощи.
Задание: Написать web-сервер под Linux
Язык: C++.
Причем сроки были даны: от 1 дня до 1 недели в зависимости от опыта работы и квалификации.
Детали реализации:
- Сервер висит на непривилегированном порту (например, 8080).
- При обращении броузером на http://localhost:8080/ должен выдаваться
листинг коревого каталога (/). При обращении к
http://localhost:8080/etc/ выводится листинг каталога /etc, и т.п.
- Все файлы и каталоги в листинге должны быть ссылками.
- Листинг должен быть отсортирован в алфавитном порядке,
причём каталоги в листинге должны предшествовать файлам.
- При обращении к любому файлу используется content type text/plain,
чтобы содержимое файлов можно было просматривать в броузере.
- Запросы должны обрабатываться сервером в многопоточном режиме,
причём [максимальное] количество потоков должно быть ограничено.
- Сервер должен поддерживать режим демона.
- Все сообщения, который сервер выводит после демонизации, должны
выводиться в лог (syslog или лог-файл -- на выбор).
- Достаточно поддержки HTTP/1.0.
- В случае ошибки сервер должен возвращать подходящий HTTP status code.
- Возможные ошибки должны обрабатываться.
- К программе должен прилагаться Makefile для сборки.
Первое, что интересует: обработка перехода по ссылкам.
Особенно интересует вопрос вывода в браузере листинга каталогов и файлов ввиде гиперссылок и организация обработки прохода клиентом по дереву каталогов.
Можно ли обойтись здесь без PHP-скриптов(нашел просто примеры реализации вывода дерева каталогов в браузере).
Я не могу полностью ответить на Ваш вопрос, т.к. не знаком более обширно с темой, но хочется знать, на какие-нибудь библиотеки Вам не намекали? Просто, по той информации, что имеется у меня по сокетам, парсерам, потокам и прочему, из чего можно было бы составить Ваш сервер, мог бы сказать, что за одну неделю такое написать и отладить мне не представляется возможным без библиотек, реализующих в приложение какое-то поведение сервера, хотя тут просто опыта, наверное, не хватает.
Если можно использовать, например, boost::filesystem, то особых сложностей по файловой системе не вижу.
Итератором проходим по директории, отдаем клиенту ответ в виде
Код:
<p><a href="http://localhost:8080/etc/">etc</a></p>
Цитата: ~ArchimeD~
Я тоже не вполне вкурил в суть и специфику вопроса.
Если можно использовать, например, boost::filesystem, то особых сложностей по файловой системе не вижу.
Итератором проходим по директории, отдаем клиенту ответ в виде
не то?
Если можно использовать, например, boost::filesystem, то особых сложностей по файловой системе не вижу.
Итератором проходим по директории, отдаем клиенту ответ в виде
Код:
<p><a href="http://localhost:8080/etc/">etc</a></p>
Это пока самое первое и единственное, что и мне пришло в голову.
не знаю как для тестового задания - но как бы задача в принципе не слишком сложная. Можно с бустом, можно и самому. И я совсем не понял причем тут пхп? Задачи ведь обработки скриптов вроде как нет?
Цитата: kot_
не знаю как для тестового задания - но как бы задача в принципе не слишком сложная. Можно с бустом, можно и самому. И я совсем не понял причем тут пхп? Задачи ведь обработки скриптов вроде как нет?
ПХП непричем - просто мысли вслух.