void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data)
{
char ip[32], subnet[32], gw[32];
if (ev == MG_EV_HTTP_MSG)
{
ip = get_ip();
subnet = get_subnet();
gw = get_gateway();
struct mh_http_message *hm = (struct mg_http_message *) ev_data;
if (mg_http_match_uri(hm, "/device/info"))
{
mg_http_reply(c, 200, "Content-Type: text/html\r\n", ""
"<!DOCTYPE html>"
"<html>"
"<head>"
"</head>"
"<body>"
"<h2>IP address: %s</h2>"
"<h2>Netmask: %s</h2>"
"<h2>Gateway: %s</h2>"
"</body>"
"</html> "
"", ip, subnet, gw);
}
}
}
int main()
{
struct mg_mgr mgr;
mg_mgr_init(&mgr);
mg_http_listen(&mgr, "http://10.0.0.6:8000", fn, &mgr);
for (;;) mg_mgr_poll(&mgr, 1000);
}
我正在使用mongoose开发一个嵌入式web服务器。目前,我使用mg_http_reply()
将整个HTML页面作为字符串发送。有没有更好的方法来做到这一点,比如直接在HTML代码本身中给出变量名(动态)?
我读过两件事:
1.使用ssi,无法从main函数获取变量(ip,subnet,gw)到HTML。
1.我使用像PHP这样的脚本语言,但我认为我的DSP(adsp bf518)可能不支持它。
1条答案
按热度按时间bwleehnv1#
Mongoose 作者来了。
正确的做法是将服务器分成两部分:
1.静态部分,提供静态页面,如HTML,CSS,图像等
1.一个动态部分,用于服务RESTful API请求
浏览器下载静态UI,然后开始调用REST API。这个代码片段演示了这个想法:
有很多例子可供选择。我建议阅读整个WebUI部分:https://mongoose.ws/documentation/#web-ui
“设备 Jmeter 板”示例是您应该用作参考的示例:https://github.com/cesanta/mongoose/tree/master/examples/device-dashboard