软件介绍
Mongoose是C语言写成的网络库。它为TCP、UDP、HTTP、WebSocket、CoAP、MQTT实现了事件驱动型的非阻塞api,常在嵌入式设备中作为一种轻量级的Web服务器使用。
支持的操作系统
经过华为云严格实测,如下操作系统在鲲鹏生态中可以运行Mongoose。
l CentOS 7.5
l EulerOS 2.8
支持版本和获取方式
l 建议使用版本为“6.10”
编译和测试方式
1. 选择操作环境
本文选用华为鲲鹏云服务ECS KC1实例做测试,详细配置如下:
类别 | 子项 | 版本 |
云服务器配置 | ECS实例类型 | kc1.xlarge.4 |
ECS配置 | 4U16GB | |
EVS | 高IO(40GB)*2 | |
云OS | CentOS | 7.5 |
Kernel | 4.14.0-49 |
2. 配置编译环境
下载和解压Mongoose软件包。
cd /usr/local/src
wget https://github.com/cesanta/mongoose/archive/6.10.tar.gz
tar -zxvf 6.10.tar.gz
3. 测试Mongoose
1) 创建Web服务器。
Mongoose提供的是源代码,分别为“mongoose.c”和“mongoose.h”, 通过测试调用它们创建Web服务器。
cd /usr/local/src/mongoose-6.10/
touch server.c
vi server.c
插入如下代码,并保存。
#include "mongoose.h"
static const char *s_http_port = "8001";
static struct mg_serve_http_opts s_http_server_opts;
static void event_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, event_handler);
if (nc == NULL) {
printf("Failed to create listener\n");
return 1;
}
mg_set_protocol_http_websocket(nc);
s_http_server_opts.document_root = ".";
s_http_server_opts.enable_directory_listing = "yes";
while(1) {
mg_mgr_poll(&mgr, 1000);
}
mg_mgr_free(&mgr);
return 0;
}
2) 编译源码。
gcc -o server server.c mongoose.h mongoose.c
./server
3) 验证。
放通云服务器安全组中入口规则里的8001端口,在浏览器中输入“http://[ECS IP]:8001”,可以看到“server.c”所在目录的文件列表信息。