Как написать веб-сервер в C/С++ на linux
Я изучаю разработку небольшого (читаемого: рудиментарного) веб-сервера на платформе linux, и я не знаю, с чего начать.
Я хочу, чтобы это было возможно:
- Прослушивание определенного порта
- Возьмите HTTP-сообщение и получите запросы
- Ответьте соответствующим образом
- Нет необходимости в управлении сеансом
- Должно быть на C или С++
- Должен работать как служба при загрузке
Я знаком с заголовками HTTP и являюсь опытным веб-разработчиком PHP и .NET, но я не уверен, с чего начать эту задачу.
Можете ли вы посоветовать мне некоторые ресурсы для преодоления кривой обучения?
Ответы
Ответ 1
Сверху вниз вам нужно знать о:
- Протокол HTTP
- Сервер TCP - программирование сокетов BSD
- запись базового Unix-демона (постоянная служба)
- управление процессом (fork)
- разбор текста (чтение текстового файла конфигурации)
- обработка файлов (I/O)
- отладка программирования C/С++:)
Итак, вам нужно будет узнать о написании базового приложения Unix, программирования сокетов BSD для сетевого программирования TCP/IP и протокола HTTP.
Обычно используемые тексты включают:
Разработка приложений Unix:
- Расширенное программирование в среде Unix, Stevens и Rago
- Расширенное программирование Unix
Программирование TCP/IP (сокетов):
- Сетевое программирование Unix, том 1 Stevens et all
- Иллюстрированный TCP/IP, Стивенс
- Ineternetworking с TCP/IP, том 3, Comer
Протокол HTTP
- RFC, включая
- RFC 2616 для HTTP v1.1,
- RFC 2068 для pre-v1.1
- плюс другие в зависимости от поддержки (сжатие, URI/URL) и полнота
Ответ 2
Для HTTP-сервера SIMPLE/BASIC/ULTRA-LIGHT поток программы должен быть примерно таким (в псевдокоде):
----Main thread----
Load settings
while true do
Wait for connection
Connection received, create a new thread and transfer this connection to this thread.
end
----Connection thread----
Analyze request
if dynamic content do
Dump the HTTP request and send it to the interpreter
Wait for response from the interpreter
Read response header from the interpreter
Stream response
else if static content do
Load requested file
Stream file content
end
(Optional) Cache the response if size < X
Send the response
Close the socket
Итак, вы должны изучить Threading, Interprocess-communication (если вы хотите взаимодействовать с интерпретатором), программирование Socket и HTTP-протокол.
Ответ 3
Все подробности не могут быть объяснены здесь
Посетите http://www.linuxhowtos.org/C_C++/socket.htm для создания базового сервера с использованием C.
Еще один IBM: http://www.ibm.com/developerworks/systems/library/es-nweb/index.html
Ответ 4
Вы всегда можете начать с существующей базы кода. boa может быть начальным, так как оно мало, реализовано на C и подходит для вашего требования "начать загрузку"; подробности, например. в пакете Debian/Ubuntu.
Ответ 5
http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers
Благодарю вас, с нетерпением wikipedia
BTW - вы можете захотеть использовать "встроенный веб-сервер с открытым исходным кодом" Google
(WWW).ibm.com/DeveloperWorks/веб/library/ва-ltwebserv/
Ответ 6
С библиотекой libevent вы можете написать веб-сервер в 40 строках c-кода.
http://www.ruilog.com/article/view/5249.html
Если вы хотите создать его с нуля, тогда вы можете ссылаться на веб-сервер с открытым исходным кодом, написанный на c как
lighttpd, apache, nginx.