1、Mongoose介绍
Mongoose 是一款嵌入式 web服务器。使用C语言编写,它可以很容易的嵌入到其他平台或是程序中,并为其提供了web接口。它为客户端和服务器模式实现TCP,UDP,HTTP,WebSocket,CoAP,MQTT的事件驱动的非阻塞API。
内置协议:
· 普通TCP,普通UDP,SSL / TLS(单向或双向),客户端和服务器
· HTTP客户端和服务器
· WebSocket客户端和服务器
· MQTT客户端和服务器
· CoAP客户端和服务器
· DNS客户端和服务器
·异步DNS解析器
2、Mongoose源码下载
下载地址:https://github.com/cesanta/mongoose/releases/
实际项目开发中,我们只需要mongoose.c + mongoose.h两个文件就可以了。因为mongoose.h头文件中通过宏的方式,已经将 src/comon/platforms目录下的所有跨平台的文件定义嵌入到了其中。所以不再需要我们将src目录下的所有文件及目录都嵌套在我们的项目里.
在初始化mongoose(mg_mgr_init)句柄的时候,就会根据CS_PLATFORM 的值而获取对应的初始化函数去初始化mongoose句柄.
3、Linux环境使用
注意:默认情况下,mongoose的日志是被宏禁掉了的,如果想要其打印日志信息,则需要开启日志打印宏(#define CS_ENABLE_STDIO 1)。
(1)编写一个简单的Web Server demo
#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;
}
(2)将该simplest_web_server.c和 下载得到的源码包中的 mongoose.c mongoose.h一起参与编译。
(3)执行simplest_web_server,我们在浏览器中访问server后得到响应是如下结果: