2010-11-12 25 views
23

Necesito construir un servidor http liviano para mi aplicación básicamente es un servidor que escucha un puerto y emite una información de estado en las solicitudes sin carga alta, https, se requiere otra funcionalidad ¿Hay alguna C++ biblioteca que me ayudaría a construir un servidor httpligero servidor http C++

+0

@ user490710 han mirado boost ... Si Windows, ¿por qué no WinHTTP? – yadab

+0

También hay pion en la biblioteca de red http://prog-xp.blogspot.fr/2011/01/creating-simple-web-server-with-pion.html – Offirmo

+0

Poco (http://pocoproject.org) puede ser una opción. Tiene un servidor HTTP ya hecho. – Eonil

Respuesta

0

Todo está allí (estándar de C++) ... sockets, leer/escribir si TCP, y otras funciones para UDP (si lo va a usar), etc ... No hay nada más que necesite excepto las funciones de red, el resto depende de la gestión de archivos (leer archivos html y demás) y del enrutamiento si quiere ir más allá.

realmente te aconsejo leer esta guía:

http://beej.us/guide/bgnet/

Es gratis y se explica todo lo necesario para poner en práctica ese pequeño servidor web.

Supongo que es una tarea, no recibí esto en mis clases de networking, pero algunos amigos lo hicieron, y es bastante fácil y divertido de hacer si tienes un poco de conocimiento de C++.

+0

Pero si realmente lo quieres es compatible con RFC, en lugar de solo trabajar con navegadores comunes, tampoco es muy trivial. – smilingthax

+0

@smilingthax: lo sé, es por eso que asumí que era una tarea universitaria. Realmente no se puede codificar un servidor web compatible con RFC en 1 o 2 semanas, que es la fecha límite normal, mientras se tienen que estudiar otras cosas. Si se trata de una tarea, probablemente desee un servidor web simple con rosca (o no, el mío es un hilo), que puede manejar básicamente GET, POST y algunas otras cosas HTML simples, y administrar algunos archivos html. Si no es una tarea ...¿Por qué alguien querría codificar su propio servidor web con tantas implementaciones livianas y seguras? – hfingler

+0

"Todo está allí (estándar de C++) ... sockets, leer/escribir si TCP, y otras funciones para UDP (si lo va a usar), etc.". ¿Hay algo que ver con HTTP, como un analizador de encabezado? –

18

Echa un vistazo a http://code.google.com/p/mongoose/. Creo que está separado en una biblioteca que hace exactamente lo que quieres. Está escrito en C, sin embargo.

+1

+1 Mi equipo utiliza mangostas para servicios livianos ... son ~ 5200 líneas de C, tres archivos de origen, una página de hombre y un archivo Makefile de cien líneas. servidores main.c como una buena ilustración de cómo llamar a mg_start() para iniciar el servidor en un hilo de fondo .... –

+0

Me gustaría aprovechar la oportunidad para preguntar si la mangosta tiene limitaciones conocidas para los servicios no livianos. Si diseño con cuidado el sitio web, ¿se puede usar como reemplazo de PHP en términos de rendimiento, o me retrasará si no modifico su código fuente? –

+0

me has perdido: PHP es un lenguaje utilizado para la generación dinámica de contenido, y fácilmente accesible por un daemon HTTP (servidor web, por ejemplo, mangosta), pero no es un daemon HTTP en sí. No veo cómo la mangosta puede reemplazar a PHP, ya que es una bestia completamente separada. Aún así, quizás se pregunte si Apache + PHP puede superar a Mangosta + PHP ... No sé, nunca intenté usar PHP con mangosta. Servimos cosas realmente simples: HTML estático y hojas de estilo. –

2

Hay libmicrohttpd. Sin embargo, tuve que escribir bastante código de pegamento para adaptarlo a mi propósito; pero nunca me arrepentí.

+0

¿Puedo preguntar por qué necesitaba pegamento? Se ve perfecto –

+0

@ n2liquid: aunque tiene algunas opciones para usarlo con otro ciclo de eventos, esto no fue suficiente para mi caso (una aplicación de GUI, es decir, Glib/Gtk (mm)). Además, la API tiene un nivel más bajo que el servicio, p. un directorio local completo. – smilingthax

+1

Ah, ya veo. Personalmente odio las bibliotecas robando el ciclo principal ... –

5

cómo sobre estos boost.asio examples, usted tiene 5 opciones a partir de la versión 1.44. o puede intentar cpp-netlib, que está basado en boost.asio y que debe incluirse en boost.