Comment écrire un serveur Web en C / C ++ sur Linux

Je cherche à développer un petit serveur Web (lire: rudimentaire) sur une plate-forme Linux et je ne sais pas par où commencer.

Ce que je veux pouvoir faire, c’est:

  • Écouter sur un port spécifique
  • Prenez des messages HTTP et recevez des requêtes
  • Répondre de manière appropriée
  • Aucune gestion de session requirejse
  • Doit être en C ou C ++
  • Doit fonctionner comme un service au démarrage

Je suis familier avec les en-têtes HTTP et je suis un développeur expérimenté de PHP et de .Net, mais je ne sais pas trop par où commencer.

Pouvez-vous me conseiller avec quelques ressources pour aborder la courbe d’apprentissage?

De haut en bas, vous devez savoir:

  • Protocole HTTP
  • Serveur TCP – Programmation de socket BSD
  • écrire un démon Unix de base (service persistant)
  • gestion des processus (fork)
  • parsing de texte (lecture d’un fichier texte de configuration)
  • gestion des fichiers (E / S)
  • débogage de la programmation C / C ++ 🙂

Vous devrez donc apprendre à écrire une application Unix de base, la programmation de socket BSD pour la programmation réseau TCP / IP et le protocole HTTP.

Les textes couramment utilisés comprennent:

Développement d’applications Unix:

  • Programmation avancée dans l’environnement Unix, Stevens & Rago
  • Programmation Unix avancée

Programmation TCP / IP (sockets):

  • Programmation réseau Unix, volume 1 Stevens et tous
  • TCP / IP illustré, Stevens
  • Ineternetworking avec TCP / IP, Volume 3, Comer

Protocole HTTP

  • RFC y compris
  • RFC 2616 pour HTTP v1.1,
  • RFC 2068 pour la pré-v1.1
  • plus d’autres en fonction du support (compression, URI / URL) et de l’exhaustivité

Pour un serveur HTTP SIMPLE / BASIC / ULTRA-LIGHT, le stream de programme devrait être similaire (en pseudo-code):

----Main thread---- Load settings while true do Wait for connection Connection received, create a new thread and transfer this connection to this thread. end ----Connection thread---- Analyze request if dynamic content do Dump the HTTP request and send it to the interpreter Wait for response from the interpreter Read response header from the interpreter Stream response else if static content do Load requested file Stream file content end (Optional) Cache the response if size < X Send the response Close the socket 

Vous devez donc apprendre le Threading, la communication interprocessus (si vous souhaitez interagir avec un interprète), la programmation des sockets et le protocole HTTP.

Tous les détails ne peuvent pas être expliqués ici
Visitez http://www.linuxhowtos.org/C_C++/socket.htm pour créer un serveur de base en utilisant C.
Un autre par IBM: http://www.ibm.com/developerworks/systems/library/es-nweb/index.html

Vous pouvez toujours commencer par une base de code existante. boa peut être un début car il est petit, implémenté en C et adapté à votre exigence de “démarrage à l’amorçage”; les détails sont par exemple dans le paquet Debian / Ubuntu.

http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers

merci encore wikipedia

BTW – vous pourriez vouloir Google “open source serveur Web intégré”

(www) .ibm.com / developerworks / web / library / wa-ltwebserv /

Avec la bibliothèque libevent, vous pouvez écrire un serveur Web en 40 lignes de code c.

http://www.ruilog.com/article/view/5249.html

Si vous voulez le créer à partir de zéro, vous pouvez faire référence à un serveur Web open source écrit en c comme lighttpd, apache, nginx.