Comment utiliser C++ pour le serveur apache
Nous pouvons intégrer php, perl, python, avec apache et créer des sites en eux.
Est-il également possible d'utiliser le C/C++ avec apache et construire des sites web en elle?
- Techniquement oui, mais croyez-moi: Vous ne voulez pas.
- Pourquoi donc? J'adore le c++, alors j'ai pensé pourquoi ne pas commencer à l'utiliser pour les sites web aussi?
- Ce qu'ils ne vous disent pas quand ils disent php/python/etc. c'est que toute la plomberie qui fait le vrai travail est fait en C++ ou quelque chose de similaire. Serveurs Web, web service,s et les bases de données ne sont pas écrites en python.
- complètement hors de propos. Par cette logique, nous serions tous à l'aide de l'assemblée, puisque c'est ce que la "plomberie" est écrit en.
- et Griwes, je ne dis pas que vous avez tort, mais en disant: "faites-moi confiance" n'est pas vraiment convaincant.
- Je crois que dans le bon outil pour le bon travail. Python n'est pas le seul outil et n'est pas droit, pour chaque emploi. Comme vous l'avez noté C++ n'est pas le bon outil pour chaque tâche soit. Il est important que la question ait une réponse équilibrée.
- L'implémentation sous-jacente de PHP/Python en C++ reste hors de propos, et je ne vois toujours pas pourquoi vous pensiez que c'était un point qui mérite d'être prise dans le contexte de "C++ pour le développement web". L'original de votre commentaire n'a rien à voir avec "le bon outil pour le bon travail".
- J'ai dit "faites-moi confiance" parce que le fait que le C++ est un très mauvais choix pour le développement web est tellement évident que je ne sais pas par où commencer.
- Comme je l'ai dit le bon outil pour le bon travail. Si le travail est un site qui permettra de voir la faible utilisation de python/php/etc. sont beaux. Si vous êtes à la mise en œuvre d'un moteur de recherche, c'est une question entièrement différente. Vous n'êtes pas habilité à répondre à cette question avec "X est TOUJOURS le bon choix de la langue", sans en connaître les exigences pour les sites développés. J'ai vraiment méfiance envers toute personne qui dit que la réponse est "évident". Si c'était, je ne serais pas de poster une réfutation.
Vous devez vous connecter pour publier un commentaire.
Il fonctionne.
Vous pouvez faire des trucs de base à l'aide de CGI: pour chaque requête vers une adresse de votre site, Apache démarre un nouveau processus avec un exécutable donné. Cet exécutable peut être C++. L'inconvénient est que un nouveau processus est créé pour chaque demande. Pour de meilleurs résultats, vous pouvez utiliser FastCGI, où le processus CGI peut fonctionner pendant plusieurs demandes différentes.
Pour des sites (web 2.0) en C++, jetez un oeil à Wt.
Trois solutions existent: Cgi, Fastcgi, SAPI.
Je vais expliquer le dernier.
Server Application Programming Interface (SAPI) est le terme générique utilisé pour désigner direct interfaces de module pour le serveur web d'applications telles que le Serveur HTTP Apache, Microsoft IIS ou iPlanet.
En d'autres termes, vous pouvez écrire un C/C++ de la bibliothèque (Pas un "vrai" de la bibliothèque, juste un fichier) qui est chargé par votre serveur web. Je vais vous expliquer comment cela peut être fait avec Apache2 sur Linux:
0. conditions préalables: Apache2, Linux en ligne de commande d'accès.
1. Obtenir apxs2, qui compile automatiquement et génère une Apache2 module compatible (
.so
fichier) de la C/C++ fichier. La façon la plus simple de l'obtenir sur Ubuntu/Debian estsudo apt-get install apache2-threaded-dev
2. Écrivez votre code C/C++ comme expliqué dans le guide officiel. Alternativement, vous pouvez rapidement générer un exemple de code avec:
apxs2 -g -n sample
. Ceci va produire plusieurs fichiers, le seul intérêt estmod_sample.c
3. Compiler:
Si vous avez écrit votre propre fichier, modifier
mod_sample.c
en conséquence.Le résultant .donc Apache2 compatible et sera stocké dans votre répertoire de modules Apache.
4. Indiquer à apache de charger le module en modifiant
/etc/apache2/apache2.conf
et d'ajouter:Vos chemins d'accès peuvent différer (
/etc...
et/usr/lib...
) selon votre distribution et des paramètres d'installation. Notez également quepoc_rest_module
est juste le nom du module et peut être changé. Enfin, notez que dans cet exemple, le module sera appelée que lorsque l'on accède àexample.com/poc_rest
.5. redémarrez Apache pour recharger la config:
sudo service apache2 restart
.Si vous voulez le code d'un site web, vous voulez vraiment une assez profonde de la bibliothèque, qui sont tous ces "autres" langages de programmation permettent de sortir de la boîte. Si vous utilisez Apache pour plus de fonctionnalité, C++ n'est pas la meilleure option.
Si vous avez encore envie d'aventure et que vous voulez utiliser C++ pour créer votre propre serveur web, essayez boost::asio. Un exemple de serveur http qui analyser les demandes que les chemins d'accès et de retour html des fichiers à partir du système de fichiers.
Pro: Rien d'autre que le C ou l'assembleur va correspondre le faible niveau de contrôle que vous obtenez avec C++. Par exemple, mon serveur web traite de façon très spécifique API RESTful, et rien d'autre.
Con: Plutôt que de profondeur de la bibliothèque de support, vous allez faire beaucoup de travail sur votre propre, alors soyez prêt pour cela. Par exemple, je viens d'ajouter l'Authentification de Base - j'ai dû rechercher le approprié HTTP Rfc, code de ma propre en-tête de Base, et de les déposer dans l'encodage Base64 pour encoder le nom d'utilisateur et mot de passe. Mais j'aime ça - je sais exactement ce qui se passe jusqu'au dernier octet.
Après avoir lu toutes les réponses, je suis tombé sur un facile-la plupart des idée pour l'utilisation de C++ au lieu de PHP/Python/Perl.
Pour la fabrication de l'argument, je vais utiliser PHP syntaxe et les conventions.
Extension Php sont écrits en C/C++ et sont compilées. Donc au lieu de perdre du temps sur la réalisation d'un pont entre le serveur frontal et notre code en C, nous venons d'écrire l'ensemble de notre site web logique dans C, et de le convertir en une extension PHP ou Python/Perl bibliothèque. Comme tout corps va utiliser C/C++ au lieu de PHP/Python/Perl pour l'amélioration de la vitesse, cette solution est un bon choix.
Notre code PHP sera juste un appel d'initier fonction exposée par notre code C, emballé comme une extension.
Ce n'est pas la seule alternative, mais permettra également d'éviter les amateurs de l'ajout d'
indésirables de bugs tout en exposant leur directement du code C de Apache.
Certaines de vos options sont les suivantes: (Rapide)CGI, la rédaction d'un Module Apache ou en utilisant un niveau plus élevé de C++ cadre qui fonctionne avec Apache.
L'une des meilleures options est d'utiliser SWIG pour générer du PHP ou Perl module pour Apache. De cette façon, on peut directement l'interface de la classe C++ ou C/C++ méthode ou une variable de PHP et y accéder à partir du serveur web. Dans cet exemple, ils se déplacent de calcul est difficile, dans la dynamique de la bibliothèque C++ http://novorado.com/2014/12/custom-c-module-for-apache-web-server/