widgets framework for c++ mongoose-web-server

framework - c++ web widgets



programa helloworld del servidor web mongoose (3)

Me encontré con un servidor web incorporado llamado Mongoose y http://code.google.com/p/mongoose/ y leí el wiki fue genial y busqué un programa de ejemplo de hello world pero no lo encontré ... . Encontré un ejemplo, pero eso fue escrito en c ++ para windows y cualquiera puede proporcionar un programa c de ejemplo para ejecutar este servidor web.


Aplicación de compilación: $ cc my_app.c mongoose.c

#include "mongoose.h" // Include Mongoose API definitions static const char *s_http_port = "8089"; // Define an event handler function static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { struct mbuf *io = &nc->recv_mbuf; switch (ev) { case MG_EV_RECV: // This event handler implements simple TCP echo server mg_send(nc, io->buf, io->len); // Echo received data back mbuf_remove(io, io->len); // Discard data from recv buffer break; default: break; } } int main(void) { struct mg_mgr mgr; mg_mgr_init(&mgr, NULL); // Initialize event manager object // Note that many connections can be added to a single event manager // Connections can be created at any point, e.g. in event handler function mg_bind(&mgr, s_http_port, ev_handler); // Create listening connection and add it to the event manager for (;;) { // Start infinite event loop mg_mgr_poll(&mgr, 1000); } mg_mgr_free(&mgr); return 0; }


Es bastante simple, primero necesita implementar la función de devolución de llamada:

void *event_handler(enum mg_event event, struct mg_connection *conn) { const struct mg_request_info *request_info = mg_get_request_info(conn); static void* done = "done"; if (event == MG_NEW_REQUEST) { if (strcmp(request_info->uri, "/hello") == 0) { // handle c[renderer] request if(strcmp(request_info->request_method, "GET") != 0) { // send error (we only care about HTTP GET) mg_printf(conn, "HTTP/1.1 %d Error (%s)/r/n/r/n%s", 500, "we only care about HTTP GET", "we only care about HTTP GET"); // return not null means we handled the request return done; } // handle your GET request to /hello char* content = "Hello World!"; char* mimeType = "text/plain"; int contentLength = strlen(content); mg_printf(conn, "HTTP/1.1 200 OK/r/n" "Cache: no-cache/r/n" "Content-Type: %s/r/n" "Content-Length: %d/r/n" "/r/n", mimeType, contentLength); mg_write(conn, content, contentLength); return done; } } // in this example i only handle /hello mg_printf(conn, "HTTP/1.1 %d Error (%s)/r/n/r/n%s", 500, /* This the error code you want to send back*/ "Invalid Request.", "Invalid Request."); return done; } // No suitable handler found, mark as not processed. Mongoose will // try to serve the request. return NULL; }

Entonces necesitas iniciar el servidor:

int main(int argc, char **argv) { /* Default options for the HTTP server */ const char *options[] = { "listening_ports", "8081", "num_threads", "10", NULL }; /* Initialize HTTP layer */ static struct mg_context *ctx; ctx = mg_start(&event_handler, options); if(ctx == NULL) { exit(EXIT_FAILURE); } puts("Server running, press enter to exit/n"); getchar(); mg_stop(ctx); return EXIT_SUCCESS; }


Escribí una biblioteca de servicio REST de C ++ que usa Mongoose. Aquí hay un ejemplo simple:

#include <iostream> #include <server/server.hpp> int main() { using namespace pwned::server; Server server; server.Get("/", [](mg_event*, Params const &) { return Server::response("Hello!"); }); std::cin.get(); }

Basado en https://github.com/nurettin/pwned/blob/master/examples/server/basics/server.cpp