显示来自嵌入式 Web 服务器的动态内容
-
09-12-2019 - |
题
我有一个嵌入式设备,运行精简版的 HTTP 服务器。目前,它可以显示静态 HTML 页面。以下是如何显示静态 HTML 页面的示例:
char *text="HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"
"<html><body>Hello World!</body></html>";
IPWrite(socket, (uint8*)text, (int)strlen(text));
IPClose(socket);
我想做的是显示动态内容,例如传感器的读数。到目前为止我想到的是每隔一段时间刷新一次页面
<meta http-equiv="refresh" content="600">
并使用 sprintf() 将传感器读数附加到 文本 响应变量。
有没有办法可以做到这一点而无需不断刷新页面?
解决方案
您可以尝试以下(根据我的经验)方法:- 划分静态和动态内容,尽量减少动态内容。
- 创建一个伪CGI接口,即网址 your_embedded_site/sensor.cgi 应绑定到生成以下 HTTP 响应:
sprintf(cgi_str, "HTTP/1.0 200 OK\r\nContent-Type: text\r\nContent-Length: %d\r\n\r\nvalue=%02d", 8, sensor_value);
或者只是(这就是您的设计考虑因素):
sprintf(cgi_str, "HTTP/1.0 200 OK\r\nContent-Type: text\r\nContent-Length: %d\r\n\r\n%02d", 2, sensor_value);
- 使用简单的javascript或小型java小程序来定期请求 your_embedded_site/sensor.cgi. 。请注意,javascript 通常依赖于浏览器,并且可能会被关闭,java applet 还需要额外的静态内容 - 一些“*sensor_reader.class”,但它在呈现数据和扩展简单阅读以及显示更多功能方面具有非凡的自由度。
这允许以非常有效的方式组织通信,而不是重新加载整个页面:部分代码 - 用户前端 - 将在浏览器中执行,其他部分 - 后端 - 在嵌入式设备上执行。
其他提示
请这样做 不是 使用 Java 小程序来提供此功能。
AJAX 和 Javascript 客户端使这种事情变得简单,没有嵌入式小程序的麻烦。
其中“肮脏”可以包括:
- Java安全问题
- Java 运行时不匹配
- 增加的有效负载大小(与 Javascript 代码片段相比,小程序很大)
- 速度问题(小程序启动可能很慢)
- 网页更难维护
- 等等。
总之:现在是 2013 年,只使用 Javascript 和 AJAX。
不隶属于 StackOverflow