輕量級Web服務器Mongoose

Mongoose Web Server是一款易於使用的Web服務器,它能夠嵌入到其它應用程序中,爲其提供Web接口。git

主要特寫:github

  • 跨平臺,支持 Windows、OS X 和 Linuxweb

  • 支持 CGI, SSL, SSI, Digest (MD5) 認證,WebSocket 和 WebDAV服務器

  • 支持斷點續傳和 URL 重寫websocket

  • 基於 IP 的 ACL,支持 Windows 服務,支持 GET, POST, HEAD, PUT, DELETE 方法app

  • Excluding files from serving by URI patternsocket

  • 下載速度限制,基於客戶端子網和 URI 模式mongoose

  • 體積小,可執行文件只有 40k 左右post

  • 可嵌入式,提供簡單的 API (mongoose.h). 只需一個源碼文件 mongoose.cui

  • 嵌入式實例: hello.cpost.cupload.cwebsocket.c

  • 提供 Python 和 C# 版本

  • 採用 MIT 受權協議

doc: https://docs.cesanta.com/mongoose/dev/

code :  https://github.com/cesanta/mongoose

一個簡單的http服務器:

// Copyright (c) 2015 Cesanta Software Limited
// All rights reserved

#include "mongoose.h"

static const char *s_http_port = "8000";
static struct mg_serve_http_opts s_http_server_opts;

static void ev_handler(struct mg_connection *nc, int ev, void *p) {
  if (ev == MG_EV_HTTP_REQUEST) {
    mg_serve_http(nc, (struct http_message *) p, s_http_server_opts);
  }
}

int main(void) {
  struct mg_mgr mgr;
  struct mg_connection *nc;

  mg_mgr_init(&mgr, NULL);
  printf("Starting web server on port %s\n", s_http_port);
  nc = mg_bind(&mgr, s_http_port, ev_handler);
  if (nc == NULL) {
    printf("Failed to create listener\n");
    return 1;
  }

  // Set up HTTP server parameters
  mg_set_protocol_http_websocket(nc);
  s_http_server_opts.document_root = ".";  // Serve current directory
  s_http_server_opts.enable_directory_listing = "yes";

  for (;;) {
    mg_mgr_poll(&mgr, 1000);
  }
  mg_mgr_free(&mgr);

  return 0;
}

 

Copy mongoose.c and mongoose.h to your build tree


Write code that uses Mongoose API, e.g. in my_app.c


Compile application: $ cc simplest_web_server.c mongoose.c -o simplest_web_server.exe

相關文章
相關標籤/搜索