为嵌入式系统设计Web界面

6

操作系统:Linux。

我正在尝试寻找实现嵌入式系统的Web界面的可能方法。目前有一个shell(基于文本)和一小组命令用于查询设备。

我是新手,我的问题是:

  1. 我应该使用哪个Web服务器?(我在开发环境中使用了apache并尝试使用CGI获取一些页面,但似乎这不是嵌入式系统的正确选择)

  2. 假设我使用CGI,可以使用什么策略来在CGI和主应用程序之间传递数据? 我打算在MainApp中创建一个线程来处理来自CGI脚本的查询。此线程将调用MainApp中的接口,检索数据并将其传递给CGI。

5个回答

9
我们在嵌入式系统中使用Lighttpd,它很小且易于集成。还有一些专门针对嵌入式系统的具有特殊功能的Web服务器,例如AppWeb,我认为这也是一个非常好的产品。

对于主应用程序和CGI之间的通信,您可以使用套接字或System V消息队列(如果在您的嵌入式平台上可用)。 SYSV消息队列的优点是它们非常容易使用和管理,并且消息在队列中存储即使应用程序重新启动,但它们也有一些怪癖(例如您不能在其上选择(select()))。


4
作为 Web 服务器,另一个选择是 thttpd。我在一个工业产品中成功使用它。
对于 CGI 和主应用程序之间的通信,套接字是正确的选择。

谢谢您的答案。但我已经让lighttpd工作并使用套接字了。 - Sandeep Prabhu

0

你不必使用 Web 服务器,但在嵌入式方面还有比 Apache 更好的选择。Apache 是为嵌入式设计的,更大且更慢。

我不建议使用 CGI。它运行和开发都很慢。我可以代表其中之一的开发者,推荐 Appweb。Appweb 有两个很好的 Web 框架:

  • Ejscript 是一个用于 Appweb 的服务器端 JavaScript 框架
  • ESP 是一个 MVC C 语言 Web 框架

ESP 非常快速,并提供了将控制器绑定到 URL 的简单方式。Ejscript 更大,具有更广泛的类库。两者都是为嵌入式设计的,比 CGI 更出色,并且执行速度比 CGI 快 20 倍以上。


你的回答似乎有些危险,因为你在回答中故意遗漏了自己是Appweb项目的开发人员这一事实。在继续发布任何回答之前,你真的需要阅读一下关于自我推广的常见问题解答 - Andrew Barber
Andrew,谢谢你的提示。我正在学习规则并试图更好地界定我的答案。我将添加有关在项目中作为开发人员的披露。 - SenseDeep

0
我们在openwrt中使用JUCI。它是用javascript编写的,运行在客户端浏览器上,并通过json rest api与web服务器通信。后端可以用任何语言实现,但我们使用可重用的C组件插入系统总线(ubus)。这意味着相关服务通过ubus公开其功能,可以通过cli和rest api两种方式使用。实际上非常不错。

0

我正在使用LuCI进行工作,它是一种用于嵌入式设备的轻量级CGI。实际上,它是针对无线路由器的开源项目openwrt。

服务器是uhttpd,轻巧而强大。

CGI脚本是Lua编写的,其解释器不超过10k,非常精致。它是由C语言开发的,并且可以与C语言通信,功能强大。

因此,这是我的建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接