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 это не сработает.

Другие вопросы по тегам