Existe-t-il un serveur Web hautes performances (idéalement événementiel et open source) en C ou C++?
J'aimerais pouvoir l'utiliser en ce qu'il appelle une méthode/fonction dans mon application avec une classe/structure de demande HTTP remplie, puis je peux lui renvoyer une classe/structure de réponse HTTP remplie.
S'il n'est pas open source, j'aurais besoin d'un support intégré pour les connexions à longue interrogation, la persistance, etc. — sinon, je pense que je peux ajouter ces choses moi-même.
Si vous ne connaissez aucun de ces serveurs disponibles, recommanderiez-vous d'écrire mon propre serveur Web pour répondre à la tâche? Il ne peut pas être basé sur un fichier et doit être écrit en C/C++ hautes performances.
Edit: je pense à quelque chose comme le Ruby Mongrel pour C, si cela aide.
J'avais les mêmes exigences pour mon travail, j'ai donc évalué un certain nombre de solutions: mangouste, libmicrohttpd, libevent. Et je pensais aussi à écrire des modules nginx. Voici le résumé de mes découvertes:
J'adore ce serveur et je l'utilise beaucoup. Ses performances et son utilisation des ressources sont bien meilleures que celles d'Apache, que j'utilise également mais que je prévois de migrer vers nginx.
La bibliothèque Libevent a un serveur Web intégré appelé evhttp.
projet G-WAN n'est pas open source, mais je voudrais en dire quelques mots.
Comme vous pouvez le voir, aucune des alternatives existantes ne m'a pleinement satisfait. J'ai donc développé mon propre serveur, qui est ...
Points forts de la fonctionnalité:
Limites:
Je suggère d'écrire un exécutable FastCGI qui peut être utilisé avec de nombreux serveurs Web hautes performances (même ceux à source fermée).
Je vais suggérer la même chose que Axel Gneiting - mais j'ai fourni une réponse avec mes raisons pour adopter cette approche:
1) HTTP n'est pas un protocole trivial - écrire votre propre serveur ou modifier une solution standard est une tâche très complexe - beaucoup plus complexe que d'utiliser les API disponibles pour implémenter un moteur de traitement séparé
2) L'utilisation d'un serveur Web grand public (non modifié) devrait vous fournir plus de fonctionnalités que vous n'en avez besoin (vous avez donc de plus en plus d'espace).
3) L'utilisation d'un serveur Web grand public (non modifié) signifie généralement qu'il a été beaucoup plus largement testé et documenté qu'un système homebrew.
4) .. et il est plus probable qu'il soit sûr et stable.
5) En utilisant fastCGI, vous pouvez utiliser toutes sortes de langages pour développer votre traitement back-end en - y compris C++ et C. Il y a boîtes à outils standard disponibles pour faciliter cela.
6) en variante, de nombreux serveurs Web prennent en charge l'exécution de moteurs d'interprétation en cours (par exemple, mod_php, mod_Perl). Je déconseille cependant d'exécuter votre propre code natif en tant que module.
Il ne peut pas être basé sur un fichier.
Eh? Qu'est-ce que ça veut dire?
mangouste: un fichier. Simple et facile à utiliser. pas un asycn io mais parfait pour des applications intégrées et particulières.
gwan. excellent. pas de plantage. configuration ultra bien planifiée. très intelligent et facile pour le développement c/c ++ en d'autres termes, api sensible très propre par rapport à nginx. fournit un fil par noyau. ou tout ce que vous spécifiez. un excellent choix. plus grand inconvénient (peut-être que je manque dans ce domaine): ne peut pas passer par le code.
libevent: le thread unique n'est pas un inconvénient sur une machine monocœur. après tout, son point est une entrée/sortie asynchrone. possède des multithreads pour d'autres cœurs.
nginx: aucune expérience personnelle. gagner du terrain sur un serveur inégal. (API terriblement confuse)
boost asio: une bibliothèque c ++ pour asynchio (asio). impressionnant. a besoin d'une api conviviale de niveau supérieur pour les simpletons comme moi. et d'autres qui proviennent de php, Java, javascript, node.js et d'autres langages Web.
bouteille python: génial 1 fichier lib (framework/système) qui facilite la construction des applications web python. a/est un serveur httpd intégré, comme libevent et node.js
node.js: serveur asyncio javascript. une excellente sélection. malheureusement, il faut programmer en javascript qui devient fastidieux. alors qu'il y a quelque chose à dire pour faire le travail; il y a aussi quelque chose à dire pour s'amuser pendant le processus. j'espère que personne ne propose node.php
Je suis un passionné nginx utilisateur; nginx est écrit en C; nginx semble pouvoir fonctionner pour vous. Si vous voulez la meilleure vitesse de nginx, je ferais un module nginx. Voici modules tiers que vous pouvez examiner pour avoir une idée de ce dont il a besoin.
En ce qui concerne l'exigence d'interrogation longue, vous voudrez peut-être jeter un œil aux modules http Push.