嵌入式web服务器选择

it2025-04-22  22

说明

一些嵌入式产品(路由器,安防摄像头等),没有屏幕,但是需要显示一些信息或者提供一些设置功能给用户,常见的解决方案是:设备端通过网络协议与其它平台客户端进行通信,在其它平台客户端上实现信息显示和对设备控制。 网络协议 最成熟并且使用最多的协议是Http协议,Http协议是超文本传输协议,不仅仅可以用于实现网站,也可以用来充当应用协议,http协议是很成熟很强大的协议,几乎能满足产品所有的需求。在项目中尽量使用成熟稳定的协议,如果没有特殊需求不要尝试自定义协议。 客户端 可采用浏览器或者实现手机客户端。采用浏览器观看网页的形式,设备端需要集成一个简单网站,在同一个局域网内用户可以通过PC或者其它设备访问该网站,相对其它方式,该方式使用便利并且更节省成本。

设备端实现方式

采用Http协议加浏览器的形式,设备端需要集成一个嵌入式web服务器和一个网站,并且最重要的工作是对外提供http访问接口。由于资源受限,嵌入式领域软件技术相对滞后,使用到的库、框架等技术都比较老,嵌入式web服务器也不例外,大部分公司使用的实现对外接口的方式比较老旧。

CGI方式(常见方式)

采用CGI标准协议是最原始,但是在嵌入式端确是最常见的方式。移植网上开源的嵌入式web服务器,新增http接口只能采用CGI技术,再通过进程通信的方式和主进程通信。为了不需要修改开源库源码,以及获得更好的扩展性,当前大部分公司采用的方式就是CGI。

CGI协议说明

CGI是一个标准协议,可以采用大部分语言实现,每个请求都需要创建单独的进程执行相应的CGI程序,执行完后进程结束,频繁的进程创建和消耗容易导致性能低下。

常见嵌入式web服务器

网上可以找到很多小型的嵌入式web服务器,例如:boa,goahead, lighttpd, mongoose等。由于CGI协议是标准的,CGI程序是独立的,选择哪款嵌入式web服务器差别不是很大,。

Memory CGi方式

有些开源库,例如:goahead,mongoose等,有所改进,支持内存中的CGI和ASP技术等,处理请求不需要创建新的进程来处理,直接在服务器进程进行处理。但是这些框架扩展不是很方便,新增接口需要添加稍多代码,并且框架实现网络方面多路复用依然采用的select,总体来说:这些技术只能支持用户实现简单的网站,不能用于实现较为复杂的网站。

FastCGI/自主实现

在互联网领域,web服务器有一些新的技术,例如:PHP的fastCGi,java的servlet等。但是在嵌入式领域,暂时没有哪款开源库支持复杂的机制,有些公司,技术能力足够,自己设计一个web服务器,例如:我工作的第一家公司使用的是自己设计的一个web服务器,封装成了库,扩展性很好,使用也很方便。

自主实现的web服务器需要做的事情

提供网页。提供webservice接口。

自主实现的优势

功能更强大,性能更好 网上的开源库扩展接口几乎都是采用的CGI,每个请求都需要创建新的进程,运行效率低,并且CGI进程获取一些主进程数据,不是很方便,需要用到进程通信。大部分嵌入式开源库为了追求性能和兼容性,使用到的技术比较老,更新不频繁,例如:很多使用C语言实现,网络多路复用使用select而不是epoll,网页方面只支持ASP。网上开源库很多复杂功能不支持,使用限制较多。 扩展和使用方便 由于嵌入式领域常见用法是CGI,网上的开源库大部分未考虑将服务器嵌入主程序,扩展起来不是很方便,需要写很多重复的代码。
最新回复(0)