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

Как использовать С++ для сервера Apache

Мы можем интегрировать php, perl, python с apache и строить сайты в них.

Можно ли использовать C/С++ с apache и создавать в нем веб-сайты?

4b9b3361

Ответ 1

Он работает.

Вы можете делать базовые вещи, используя CGI: для каждого запроса адреса на вашем сайте Apache запускает новый процесс с заданным исполняемым файлом. Этот исполняемый файл может быть С++. Недостатком является то, что для каждого запроса создается новый процесс. Для получения лучших результатов вы можете использовать FastCGI, где процесс CGI может выполняться для нескольких разных запросов.

Для продвинутых сайтов (читайте web 2.0) на С++ посмотрите Wt.

Ответ 2

Существуют три решения: Cgi, Fastcgi, SAPI. Я объясню последний.

Интерфейс программирования сервера (SAPI) - это общий термин, используемый для обозначения интерфейсов прямого модуля для приложений веб-сервера, таких как HTTP-сервер Apache, Microsoft IIS или iPlanet.

Другими словами, вы можете написать библиотеку C/С++ (не "реальную" библиотеку, а только файл), который загружается вашим веб-сервером. Я объясню, как это можно сделать с Apache2 в Linux:

0. Предпосылки: Apache2, Linux, доступ к командной строке.

1. Получите apxs2,, который автоматически компилирует и генерирует совместимый с Apache2 модуль (.so файл) из файла C/С++. Самый простой способ получить его на Ubuntu/Debian - sudo apt-get install apache2-threaded-dev

2. Напишите код C/С++, как описано в официальном руководстве. Кроме того, вы можете быстро сгенерировать образец кода с помощью apxs2 -g -n sample. Это создаст несколько файлов, единственное, что представляет интерес: mod_sample.c

3. Обобщение:

apxs2 -a -c mod_sample.c

Если вы написали свой собственный файл, измените mod_sample.c соответственно. Полученный .so совместим с Apache2 и будет храниться в вашем каталоге модулей Apache.

4. Скажите apache загрузить модуль, изменив /etc/apache2/apache2.conf и добавив:

LoadModule poc_rest_module /usr/lib/apache2/modules/mod_poc_rest.so
<Location /poc_rest>
    SetHandler poc_rest
</Location>

Ваши пути могут отличаться (/etc... и /usr/lib...) в зависимости от настроек вашего дистрибутива и установки. Также обратите внимание, что poc_rest_module - это просто имя модуля и может быть изменено. Наконец, обратите внимание, что в этом примере модуль будет вызываться только при переходе на example.com/poc_rest.

5. перезапустите Apache, чтобы перезагрузить конфигурацию: sudo service apache2 restart.

Ответ 3

Если вы хотите создать код веб-сайта, вам действительно нужна довольно глубокая библиотека, которую все эти "другие" языки предоставляют из коробки. Если вы используете Apache для большей части этой функциональности, С++ не лучший вариант.

Если вы все еще чувствуете себя авантюрно и хотите использовать С++ для создания своего собственного веб-сервера, попробуйте boost:: asio. Предоставляется пример http-сервера, который будет анализировать запросы как пути и возвращать html файлы из файловой системы.

Pro: Ничто иное, как C или ассемблер, не будет соответствовать низкоуровневому элементу управления, который вы получаете с С++. Например, мой веб-сервер обрабатывает очень специфичный API RESTful и ничего больше.

Con: Вместо глубокой поддержки библиотеки вы будете делать много работы самостоятельно, поэтому будьте готовы к этому. Например, я просто добавил базовую аутентификацию - мне пришлось искать соответствующие HTTP-RFC, код моего собственного основного заголовка и отбрасывать кодировку Base64, чтобы кодировать имя пользователя и пароль. Но мне это нравится - я точно знаю, что происходит до последнего байта.

Ответ 4

Вы можете проверить fastcgi

Ответ 5

Некоторые из ваших опций: (быстрый) CGI, написание Apache module или использование какой-то более высокоуровневой платформы С++, которая работает с Apache.

Ответ 6

Один из лучших вариантов - использовать SWIG для создания PHP или Perl-модуля для Apache. Таким образом, можно напрямую связать С++-класс или C/С++-метод или переменную с PHP и получить доступ к нему с веб-сервера. В этом примере они перемещают вычислительно жесткую часть в динамическую библиотеку С++ http://novorado.com/2014/12/custom-c-module-for-apache-web-server/

Ответ 7

Прочитав все ответы, я наткнулся на самую легкую идею использования С++ вместо PHP/Python/Perl.

Для создания аргумента я буду использовать синтаксис и условные обозначения PHP.

Расширение Php написано на C/С++ и скомпилировано. Поэтому вместо того, чтобы тратить время на создание моста между интерфейсным сервером и нашим C-кодом, мы просто пишем всю нашу логику веб-сайта в C и преобразуем его в расширение PHP или библиотеку Python/Perl. Поскольку любое тело будет использовать C/С++ вместо PHP/Python/Perl для повышения скорости, это решение является хорошим выбором.

Наш PHP-код просто вызовет инициирующую функцию, представленную нашим C-кодом, упакованным как расширение.

Это не только альтернатива, но и предотвратит добавление любителями нежелательные ошибки, выставляя свой код C непосредственно Apache.