本帖最后由 木子鱼 于 2014-6-8 12:44 编辑
看到RIO板子强大的硬件平台,我想动手搞一搞 嵌入式Web服务器的设计!这是拓宽板子用途的一个理想方案。查询各方资料初步整理下: 通用Web服务器:Web服务器本质是一个软件,通常在PC机或者工作站上运行。Web服务器的主要功能是对来自客户端Web浏览器的请求做出回应,获取特定的文件(或者调用执行CGI程序),然后返回这个文件或者程序执行结果给客户端。Web浏览器和Web服务器通过超文本传输协议(HTTP)进行通信。当一个HTTP请求到达时,Web服务器处理命令(GET方式、POST方式等),开始在服务器端查找浏览器所请求的文档并交付给浏览器。如果服务器没有找到请求的文档,就必须发送一个"404 Not Found[size=15.833333015441895px]"报文;如果服务器无法识别浏览器的请求命令,则必须发送一个“501 Not Implemented ”响应。 嵌入式Web服务器:是指将Web服务器引入到现场测试和控制设备中,在相应的硬件平台和软件系统的支持下,使传统的测试和控制设备转变为以底层通信协议,Web技术为核心的基于互联网的网络测试和控制设备。 嵌入式Web服务器采用的是B/S结构。B/S(Browser/Server)结构即浏览器和服务器结构。B/S结构下,客户端仅仅操作WWW标准浏览器,通过Internct网络访问服务器端,主要事务逻辑在服务器端实现。支撑嵌入式Web服务器工作的两个主要的协议就是TCP/IP协议和HTTP协议。TCP/IP协议是计算机通过Internet互联的基础,而HTTP引擎是Web服务器的核心技术。 设计实现嵌入式Web服务器之前,首先要清楚嵌入式Web服务器的功能模块划分,大体上可以分为服务器初始化模块、服务器侦听客户请求模块、服务器解析客户请求模块、脚本引擎模块、输出模块和命令执行模块。 嵌入式Web服务器的主要功能模块的执行流程,如图2—1所示。 初始化模块完成程序的初始化,如定义全局变量、设置信号量、创建套接字,并绑定到服务器端口和IP,开启TCP连接,保持为侦听状态;当侦听到来自于用户的HTTP请求时,侦听模块接收用户的请求,并交付给解析模块解析用户请求类型。请求分析模块是整个服务器的核心,根据不同的分析结果,进行相应的处理,如表2—2所示。 CGI(Common Gateway Interface,通用网关接口)定义了Web服务器与其他可执行程序(CGI程序)之间进行交互的接口标准。CGI实时执行,适用于客户端与服务器端的动态交互。在Web环境下,客户端将信息发送给Web服务器,Web服务器将通过CGI接口标准将信息传递给CGI程序处理。通过这样的过程实现了客户端与Web服务器端的交互。 客户端浏览器将通过HTTP请求向服务器传递信息,Web服务器接收到信息后对信息进行解析,需根据请求的类型调用对应的CGI程序。Web服务器遵守CGI程序的接口标准通过环境变量或者标准输入将信息传递给CGI程序,CGI程序提取相关的信息并进行相应的处理,以HTML格式通过标准输出将结果返回Web服务器。嵌入式Web服务器检查确认数据格式正确后,将结果返回给客户端浏览器。至此,完成完成客户端与服务器端的一次交互。 CGI程序的调用方法: CGI程序有两种调用方法: (1)通过URL访问直接调用: 如:http://192.168.0.8/cgi.bin/test.cgi (2)通过交互式网页调用。用户在网页上录入信息,并将信息发送给CGI程序同时调用执行CGI程序。这种方式是最常用的调用方式,市场上知名的搜索引擎基本都是采用这种调用方式。 GI的请求方法: 对于上述的第二种的数据交互方式,即FORM表单的方式,它提供了两种在浏览器和CGI程序传输数据的方式——GET和POST。两种方式都可以完成客户端与服务器端数据的交互,但两者的传输方式有很大的不同。 本文将分别采用GET和POST两种方式实现CGI程序,通过两种数据传输方式,完成客户端与服务器端的数据交互。客户端向服务器端发送HTTP请求,经HTTP解析模块分析为CGI请求,则调用CGI程序进行处理。 CGI程序的实现流程: 嵌入式Web服务器架构的设计: 图2.11中使用编号①~⑦来代表本设计嵌入式Web服务器的工作流程。 ①客户端向服务器端发出连接请求,请求建立TCP连接; ②服务器端一直保持监听状态(无限循环监听),当接收到客户端的连接请求后,确认其连接请求合法,并建立TCP连接; ③建立TCP连接后,客户端通过TCP连接向服务器发送HTTP请求; ④HTTP请求经过Web服务器的请求解析模块分析得出请求类型,并继续进行相应的处理; ⑤静态网页请求,将静态网页信息发送给客户端; ⑥CGI程序调用请求,执行相应的CGI程序,并将结果发送给客户端; ⑦服务器端向客户端发送HTTP响应信息。
|