82 votes

Création d’un serveur web en pur C

Im faire un petit projet sur mon université qui implique aujourd'hui dans la création d'un serveur web en utilisant uniquement le C. j'en sais un peu plus sur HTTP 1.1 et j'ai créé un serveur web en C# à l'avant.

Cependant, j'aimerais voir comment vous commencer avec la prise de programmation et l'utilisation de multi-threads en C, ou la façon dont vous le feriez autrement créer un serveur web en C.

Il n'y a pas vraiment beaucoup d'exigences, je voudrais juste obtenir commencé avec un peu de prise, l'écoute sur le port 80, l'envoi de certains responsables de texte sur le serveur web / telnet client. Et peut-être un peu de code de la structure des conseils de l'aide aussi. La plus grande exigence, c'est probablement que son pour Linux.

72voto

Bill the Lizard Points 147311

Quand j’ai eu une affectation semblable à un cours de programmation réseau j’avais l’habitude Guide de Beej's to Network Programming. Je n’avais qu’à écrire un simple serveur gérée GET et POST demandait alors Guide de Beej m’a fait tout au long du projet.

22voto

alxp Points 3180

Le fait qu'il est un serveur web que vous souhaitez créer C est moins important que le fait que vous voulez faire une prise réseau de la programmation en C. Un serveur web est un cas particulier où vous arrive d'être de retour un certain type de contenu basé sur une requête, le faible niveau de la plomberie est le plus important.

Un bon guide de démarrage pour Berkeley programmation socket peut être trouvé ici: http://www.uwo.ca/its/doc/courses/notes/socket/ il explique tous les C les structures et la manière de les utiliser, et est une excellente amorce pour la programmation réseau en C ou en d'autres langues.

14voto

codeassembly Points 573

Voici une liste de petits serveurs Web, certains d'entre eux sont écrits en C, serveurs web minuscule

Et voici le code pour un très petit, j’ai posté le code ici car le site est indisponible.

5voto

Eclipse Points 27662

Voir cette question/réponse ici pour un groupe de plus.

Il y a plusieurs façons d'architecte multithread serveurs de socket, mais celui que j'ai trouvé pour être couronnée de succès/évolutive consiste à utiliser deux pools de threads. Avoir 1 ou plus de fils d'écoute pour les connexions entrantes, et de la faire passer à ceux de connexion dans une file d'attente d'éléments de travail. Vous disposez ensuite d'un pool de threads avec un tas de fils que le processus de la file d'attente. Dès qu'un thread est en fait la transformation d'une demande, il va revenir à la file d'attente et reçoit la demande suivante. Cela met les choses en place comme un classique producteur/consommateur face qui est généralement un problème résolu dans les bibliothèques multithread.

Avoir la connexion accepté fait immédiatement savoir au client que le serveur n'est pas vers le bas, même quand il est surchargé, et vous pouvez garder un œil sur la longueur de la file d'attente de travail afin de savoir quand vous avez besoin d'ajouter un nouveau matériel.

Vous pouvez également faire la même chose avec un pool de processus à l'aide de la fourche insteads de threads.

Voici un document décrivant un pipeline multithread serveur web, mais il décrit aussi une variété d'autres architectures standard.

4voto

gimel Points 30150

Pour obtenir quelques conseils sur la façon dont un vrai serveur HTTP est écrit en C, vous pouvez regarder le lighttpd source.

lighttpd (prononcé "lighty") est un serveur web conçu pour être sécurisé, rapide, conforme aux normes, et flexible tout en étant optimisé pour la vitesse dans des environnements critiques. Lighttpd est écrit en C. Lighttpd est utilisé par certains des plus grands sites web, y compris des sites tels que YouTube, Wikipedia et meebo.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X