FastCGI для C++
Я нашел только две библиотеки FastCGI для C++. Есть "официальный" и fastcgi ++. Чем один из них лучше другого? Существуют ли другие?
6 ответов
Поскольку fastcgi++ по-прежнему указан как "Статус разработки: 4-бета", поэтому я бы предложил перейти на официальный. Он существует уже целую вечность и имеет привязки для целого ряда языков. Лицензии между двумя, кажется, не имеют большого значения. Поместите некоторые измерения в свой код, и если производительность является проблемой, потратьте некоторое время, играя с альтернативами.
То, что вы, вероятно, хотите, спрятано в contrib
каталог пакета Cgicc.
fcgi-test.cpp
пример использования cgicc с FastCGI.
Путь к установленному fcgi-test.cpp
должно быть/usr/share/doc/libcgicc-doc/examples/contrib/fcgi-test.cpp
Официальная библиотека довольно низкого уровня, и поэтому полезна только в качестве промежуточного звена для библиотеки CGI высокого уровня, такой как cgicc.
Fastcgi ++, с другой стороны, позволяет использовать идиомы C++ при работе с FastCGI. Незавершенность в v1 побудила меня раскошелиться на mosh-fcgi.
Плюсы: мой форк соответствует всем пунктам стандарта (особенно ROLE_FILTER), все тщательно шаблонизировано, поэтому проще использовать произвольный T для std::basic_strings. Минусы: Мои модификации в альфа-режиме.
В любом случае загрузите последнюю версию zip с сайта https://github.com/moshbear/mosh-fcgi.
Смотрите также библиотеку Cgicc:
http://www.gnu.org/software/cgicc/
Библиотека выглядит зрелой (в настоящее время в версии 3.x). В соответствии с документацией его можно использовать с FastCGI, передав пользовательский ридер (reader_function_t) в конструктор класса Cgicc.
Есть красивая библиотека для создания демонов FastCGI: https://github.com/golubtsov/Fastcgi-Daemon
C-версия FastCGI делает очень мало, и разработка на C++ не такая большая проблема, поскольку она вряд ли мешает вашему собственному коду. Скорее всего, это просто цикл и переменная окружения.
Так что мой совет будет просто придерживаться официальной версии.
Просто знайте одну вещь: это работает, переопределяя printf
! Так что если вы используете cout
это не сработает.