操作系统:Linux。
我正在尝试找到为嵌入式系统实现Web界面的可能方法。 目前有一个shell(基于文本),并且实现了一小组命令来查询设备。
我是网络开发的新手,我的问题是:
我必须使用哪种网络服务器? (我在开发设置上得到了apache并尝试使用CGI获取一些页面,但看起来这不是嵌入式系统的正确选择)
假设我正在使用CGI,可以使用什么策略在CGI和主应用程序之间传递数据? 我打算在MainApp中创建一个线程来处理来自CGI脚本的查询。该线程将调用MainApp中的接口,检索数据并将其传递给CGI。
答案 0 :(得分:9)
我们在嵌入式系统上使用Lighttpd,它体积小,易于集成。还有专门的网络服务器,其功能特别适合嵌入,如AppWeb,在我看来也是一个非常好的产品。
对于主应用程序和CGI之间的通信,您可以使用套接字或System V消息队列(如果嵌入式平台上有这些消息队列)。 SYSV消息队列的优点是它们非常易于使用和管理,并且队列中的消息可以在应用程序重新启动后继续存在,但它们也有一些怪癖(就像你不能选择它们一样)。
答案 1 :(得分:4)
作为网络服务器,另一个选择是thttpd。我在工业产品中成功使用它。
CGI和主应用程序套接字之间的通信是正确的选择。
答案 2 :(得分:0)
没有必须使用的Web服务器,但嵌入式比apache有更好的选择。 Apache专为嵌入式设计而且更大更慢。
我不推荐CGI。它运行缓慢,发展缓慢。我可以代表Appweb,我是开发人员之一。 Appweb有两个很好的Web框架:
ESP非常快,并且可以轻松地将控制器绑定到URL。 Ejscript更大,拥有更广泛的类库。两者都是为嵌入式设计的。两者都比CGI好得多,执行速度比CGI快20倍。
答案 3 :(得分:0)
我在LuCI工作,这是一个用于嵌入式设备的轻型CGI。实际上它是openwrt,它是无线路由器的开源项目。
服务器是uhttpd,轻巧而强大。
CGI脚本是Lua,其翻译不超过10k,很精致,对吧?它由C开发,可以与强大的C进行通信。
所以这是我的建议。
答案 4 :(得分:0)
我们使用JUCI和openwrt。它是用javascript编写的,在客户端浏览器上运行,并通过json rest api与web服务器通信。后端可以用任何语言实现,但我们使用C语言编写的可重用组件插入系统总线(ubus)。这意味着相关服务通过ubus公开其功能,可以通过cli和rest api使用。它真的很不错。