Подтвердить что ты не робот

Как написать веб-сервер в C/С++ на linux

Я изучаю разработку небольшого (читаемого: рудиментарного) веб-сервера на платформе linux, и я не знаю, с чего начать.

Я хочу, чтобы это было возможно:

  • Прослушивание определенного порта
  • Возьмите HTTP-сообщение и получите запросы
  • Ответьте соответствующим образом
  • Нет необходимости в управлении сеансом
  • Должно быть на C или С++
  • Должен работать как служба при загрузке

Я знаком с заголовками HTTP и являюсь опытным веб-разработчиком PHP и .NET, но я не уверен, с чего начать эту задачу.

Можете ли вы посоветовать мне некоторые ресурсы для преодоления кривой обучения?

4b9b3361

Ответ 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-протокол.

Ответ 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.