34 votes

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

Je suis à la recherche dans le développement d'une petite (lire:rudimentaire) serveur web sur une plate-forme linux et je n'ai aucune idée par où commencer.

Ce que je veux être en mesure de le faire est:

  • L'écoute sur un port spécifique
  • Prendre HTTP post et get demandes
  • Réagir de façon appropriée
  • Pas de gestion de session requise
  • Doit être en C ou C++
  • A exécuter en tant que service au démarrage

Je suis familier avec les en-têtes HTTP et je suis expérimenté en PHP et .Net développeur web, mais je ne suis pas sûr où commencer avec cette tâche.

Pouvez-vous me conseiller avec quelques ressources pour combler la courbe d'apprentissage?

39voto

mctylr Points 3687

De haut en bas, vous aurez besoin de savoir sur:

  • Le Protocole HTTP
  • Serveur TCP - programmation socket BSD
  • l'écriture d'une base Unix démon (persistante de service)
  • la gestion des processus (fork)
  • l'analyse du texte (lecture d'un fichier texte de configuration)
  • gestion des fichiers (I/O)
  • débogage de programmation C / C++:)

De sorte que vous aurez à apprendre à propos de l'écriture d'une base d'applications Unix, BSD programmation socket pour le réseau TCP/IP de la programmation, et le protocole HTTP.

Couramment utilisé textes comprennent:

Le développement d'applications Unix:

  • Advanced Programming in the Unix Environment, Stevens & Rago
  • Avancée De La Programmation Unix

TCP/IP (sockets) programmation:

  • Unix, Programmation Réseau, Volume 1 Stevens et tous
  • TCP/IP Illustrated, Stevens
  • Ineternetworking avec le protocole TCP/IP, Volume 3, Comer

Le Protocole HTTP

  • Rfc y compris
  • La RFC 2616 pour HTTP v1.1,
  • RFC 2068 pour le pré-v1.1
  • plus d'autres en fonction de l'appui (compression, URI / URL) et de l'exhaustivité

18voto

Kedare Points 743

Pour un serveur HTTP SIMPLE / BASIC / ULTRA-LIGHT, le déroulement du programme devrait ressembler à cela (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 devriez donc apprendre le threading, la communication interprocessus (si vous souhaitez interagir avec un interprète), la programmation de sockets et le protocole HTTP.

8voto

N 1.1 Points 7687

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.
Une autre par IBM: http://www.ibm.com/developerworks/systems/library/es-nweb/index.html

4voto

Ryan Points 41

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

merci encore wikipedia

BTW - vous voudrez peut-être Google "serveur open source intégré"

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

4voto

Dirk Eddelbuettel Points 134700

Vous pouvez toujours commencer avec 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 au démarrage"; les détails sont par exemple dans le paquet Debian / Ubuntu.

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