当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于uIP与AJAX的动态Web服务器设计

摘要:针对远程信息监测系统中数据的实时采集更新问题,将AJAX和CGI应用到嵌入式Web服务器的设计中,实现了服务器与浏览器之间的动态信息交互。本文首先分析了uIP协议栈,并在协议栈之上设计了Web服务器,然后利用CGI服务程序处理来自客户端的XMLHttpRequest对象请求,实现动态Web功能。现场实验结果表明,嵌入式Web服务器降低了服务器端的资源开销,提高了响应速度。
关键词:uIP协议栈;AJAX技术;嵌入式Web服务器;通用网关接口

引言
    远程信息监测系统是通过网络远程收集目标信息并监控目标对象运行状态的嵌入式系统。远程信息监测系统中嵌入式Web服务器的使用,可以使用户通过浏览器访问远端的嵌入式设备,这样能够大大提高系统的易用性和可维护性。目前,在远程监测系统中普遍采用的实时数据采集方法是在网页上嵌入Applet或ActiveX控件,但是这种方法不仅会威胁到客户端的安全,还增加了服务器的负担,从而限制了Web服务器的实现和应用。为了满足资源有限的嵌入式系统的需要,本文采用微型TCP/IP协议栈uIP,在协议栈之上设计实现了基于CGI的动态Web服务器,并将AJAX技术应用到客户端与服务器的实时数据交互中。AJAX技术的实现是将JavaScript程序内嵌在网页中,不需要在浏览器上另外安装插件,降低了系统成本和Web服务器实现的难度。

1 uIP协议栈分析
    uIP是专为8/16位嵌入式微处理器设计的轻量级TCP/IP协议栈。uIP本身的源代码和占用的内存资源都非常少,其源代码只有几KB,RAM仅占几百字节。uIP采用BSD授权,遵循RFC标准,完全由C语言编写,具有良好的可移植性,可免费用于非商业和商业用途。uIP协议栈有多个版本,本设计采用的是uIP 1.0。
    为了减少对系统资源的要求,uIP的内部实现主要采用以下设计措施:
    ①不支持动态内存分配机制,使用单一的全局缓冲区uip_buf收发网络数据;
    ②着重实现了与完整TCP/IP通信所必需的ARP(地址解析协议)、IP(网际互联协议)、TCP(传输控制协议),而UDP(用户数据包协议)、ICM P(网络控制报文协议)只作为可选模块;
    ③各层协议紧密耦合,应用协议也参与了部分协议栈功能的实现。
    uIP的体系结构如图1所示。由图1可以看出,uIP协议栈处于网络通信的中间层,用户需要为uIP提供底层网卡驱动程序和定时器驱动程序。

[!--empirenews.page--]
    而uIP为底层系统提供了4个接口函数:uip_init()完成协议栈的初始化;uip_input()用于处理从以太网接收到的IP数据包;uip_perio dic()用于协议内核周期性地对各TCP连接的轮询;uip_udp_periodic()则用于UDP服务下对各UDP连接的轮询。其中,uip_input()和uip_per iodic()在协议的内部采用同一个函数void uip_process(u8_t flag)实现,区别在于调用的参数不同。uIP主程序清晰地展示了各接口函数的调用方法,其主程序流程图如图2所示。


    uIP的各处理程序会调用UIP_APPCALL()进行应用程序处理,用户需要将UIP_APPCALL宏定义为实际的应用函数名,应用程序就可以挂接到uIP中,而uip_flags是协议栈提供给应用层查询的状态变量。

2 动态Web服务器的实现
   
在uIP中已经提供了webserver的应用实例,用户可以参考它并根据自己的需求进行设计。为了实现浏览器与服务器之间的交互性,本文采用了CGI动态Web技术。CGI(Common Gateway Interface)是Web服务器与外部扩展应用程序交互的一种标准接口。目前,服务器端的动态Web技术除CGI外,还有ASP、PHP、JSP等解决方案,但它们或者是针对某种语言的,或者是依赖于特定的操作系统或商业软件,只有CGI技术适用于资源有限、编程语言受限的嵌入式Web服务器。设计的Web服务器的结构如图3所示。


    在系统初始化后Web服务器开始监听80端口,一旦有客户端请求连接,uIP就为其分配一个连接项。服务器在收到HTTP请求后,首先依据请求文件的类型来判断该请求是动态请求还是静态请求,如果请求的是HTML类型的文件则为静态请求;如果请求的是shtml类型的则为动态请求。
    对于静态请求,服务器会直接查询其文件系统是否存在该网页,如果存在就响应客户端的请求;如果不存在就响应404请求错误网页。为了减少存储资源的使用,uIP没有一般的文件系统,而是将所有静态网页存储为常量数组,并将这些数组串联成一个文件链表,采用轮询的方式按照网页名称进行查询。[!--empirenews.page--]
    如果请求的是动态网页,服务器会调用CGI服务程序,CGI程序首先会根据HTTP请求参数调用相应的应用程序,生成动态数据,而后转化为动态网页,由服务器端发往客户端。CGI程序的处理流程如图4所示。



3 AJAX脚本
   
AJAX技术与其他Web技术相比,主要有以下特点:
    ①把服务器的一部分工作转移到客户端,利用客户端的处理能力,减轻了服务器的负担;
    ②主要依靠XMLHttpRequest对象实现异步通信机制,避免数据更新时整个网页的刷新,降低了通信量,节约了网络带宽;
    ③适当的AJAX技术应用可以实现更好的用户体验。
    AJAX技术的以上特点非常适合在资源有限的嵌入式系统中应用。浏览器解析AJAX脚本并运行,而服务器则会将浏览器请求的动态数据按照数据流的方式发送到客户端,其实际运行时的通信数据如图5所示。


    在笔者设计的动态网页中,异步交互部分的JavaScript代码如下:
    [!--empirenews.page--]

结语
   
笔者将本文的设计应用到油井电机参数的远程监控中,现场实验结果表明,整个监控过程运行流畅、部署方便、复用度高。用户的监控页面如图6所示。


    本文在uIP协议栈上实现了基于AJAX和CGI的动态Web服务器,该方法实现的嵌入式Web服务器可以提供静态信息的浏览,也可以通过AJAX技术异步访问服务器上的动态数据。AJAX的使用大大减少了服务器的开销,节省CGI的处理时间。基于AJAX和CGI技术的嵌入式Web服务器非常符合嵌入式系统开发过程中低成本、高可用性的要求,对于在中低端平台上实现嵌入式Web服务器的远程信息监测系统有较高的实用价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭