Как расширить HTTP-сервер C ++ с помощью приложений FastCGI?

Я пишу HTTP-сервер C ++. Но поскольку разработка на C ++ медленнее, например, в PHP, я хочу также поддерживать приложения FastCGI (PHP через FastCGI, Python через FastCGI и т. Д.). Поэтому я хочу использовать что-то похожее на mod_fcgi (для Apache). Кто-нибудь знает хорошую C ++ FastCGI-библиотеку (не для приложений, а для веб-сервера)? Я использую библиотеку Poco для написания веб-сервера.

Другим решением может быть использование PHP-интерпретатора непосредственно на моем сервере C ++. Кто-нибудь знает примеры для этого?

Все решения должны иметь представление о производительности.

Related of "Как расширить HTTP-сервер C ++ с помощью приложений FastCGI?"

Если вы пишете CMS-систему на C ++, вы должны проверить веб-фреймворк CppCMS на C ++, это кажется очень быстрым.

Если вы хотите сделать это с нуля и написать HTTP-сервер, у boost есть несколько примеров того, как настроить HTTP-сервер здесь .

Теперь, если вы хотите использовать CGI, который является самым медленным вариантом, есть библиотека GNU Cdicc для обработки CGI.

Вчера я смотрел эту тему. Как вы, возможно, знаете, fastcgi построен поверх сокетов tcp или unix, ожидающих соединения с определенным протоколом.

Схема запроса следующая: клиент подключается к веб-серверу, который подключается к приложению fastcgi. В зависимости от реализации (спецификации говорят, что веб-сервер предоставляет файловый дескриптор, подключенный к веб-клиенту ( accept() sockfd) к приложению fastcgi. Я не видел такого поведения с nginx.

Как вы можете экспериментировать?

  1. Установите nginx (конфигурация очень проста, см. Документацию )
  2. Компиляция php (простая ./configure –enable-fastcgi && make будет делать. Занимает 30 секунд для меня)
  3. запустите php-cgi на localhost port 9000 ( ./sapi/cgi/php-cgi -b 127.0.0.1:9000 )
  4. tcpdump / wireshark выход
  5. Теперь остановите php и запустите простой tcp-сервер (например, nc -l 9000 )

Я нашел спецификацию fcgi, которая очень полезна, если вы хотите написать свою собственную библиотеку. Я еще не смог найти код C / C ++ для клиента в fcgi, но его можно легко найти для perl.

Я не смог найти клиента FastCGI, поэтому сам написал. Это была большая работа, но мне это удалось 🙂 Это намного быстрее, чем простой старый CGI (duh!).