查看: 803|回复: 5

[原创] RioTboard板子·····基于RIO的嵌入式web服务器的设计与实现(1)

[复制链接]

33

主题

10

好友

2412

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    无聊
    2016-11-9 20:46
  • 签到天数: 229 天

    [LV.7]常住居民III

    发表于 2014-6-7 21:34:50 |显示全部楼层
    本帖最后由 木子鱼 于 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所示。
    WEB1.png
      初始化模块完成程序的初始化,如定义全局变量、设置信号量、创建套接字,并绑定到服务器端口和IP,开启TCP连接,保持为侦听状态;当侦听到来自于用户的HTTP请求时,侦听模块接收用户的请求,并交付给解析模块解析用户请求类型。请求分析模块是整个服务器的核心,根据不同的分析结果,进行相应的处理,如表22所示。
    WEB2.png
      CGI(Common Gateway Interface,通用网关接口)定义了Web服务器与其他可执行程序(CGI程序)之间进行交互的接口标准。CGI实时执行,适用于客户端与服务器端的动态交互。在Web环境下,客户端将信息发送给Web服务器,Web服务器将通过CGI接口标准将信息传递给CGI程序处理。通过这样的过程实现了客户端与Web服务器端的交互。
    CGI1.png
      客户端浏览器将通过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。两种方式都可以完成客户端与服务器端数据的交互,但两者的传输方式有很大的不同。
      本文将分别采用GETPOST两种方式实现CGI程序,通过两种数据传输方式,完成客户端与服务器端的数据交互。客户端向服务器端发送HTTP请求,经HTTP解析模块分析为CGI请求,则调用CGI程序进行处理。
    CGI程序的实现流程
    CGI2.png
    嵌入式Web服务器架构的设计:
    WEB3.png
    图2.11中使用编号①~⑦来代表本设计嵌入式Web服务器的工作流程。
    ①客户端向服务器端发出连接请求,请求建立TCP连接;
    ②服务器端一直保持监听状态(无限循环监听),当接收到客户端的连接请求后,确认其连接请求合法,并建立TCP连接;
    ③建立TCP连接后,客户端通过TCP连接向服务器发送HTTP请求;
    HTTP请求经过Web服务器的请求解析模块分析得出请求类型,并继续进行相应的处理;
    ⑤静态网页请求,将静态网页信息发送给客户端;
    ⑥CGI程序调用请求,执行相应的CGI程序,并将结果发送给客户端;
    ⑦服务器端向客户端发送HTTP响应信息。

    回复

    使用道具 举报

    2

    主题

    0

    好友

    798

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    开心
    2014-6-4 09:26
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-6-9 09:05:20 |显示全部楼层
    思路很清晰,可以作为知识点普及
    回复

    使用道具 举报

    33

    主题

    10

    好友

    2412

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    无聊
    2016-11-9 20:46
  • 签到天数: 229 天

    [LV.7]常住居民III

    发表于 2014-6-9 10:47:20 |显示全部楼层
    浮华若梦 发表于 2014-6-9 09:05
    思路很清晰,可以作为知识点普及

    最近2晚在完善web的测试程序,不日会上线的!
    回复

    使用道具 举报

    1083

    主题

    2

    好友

    1万

    积分

    翰林

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    开心
    2014-9-23 05:09
  • 签到天数: 113 天

    [LV.6]常住居民II

    发表于 2014-6-10 09:38:40 |显示全部楼层
    谢谢楼主分享
    回复

    使用道具 举报

    1083

    主题

    2

    好友

    1万

    积分

    翰林

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    开心
    2014-9-23 05:09
  • 签到天数: 113 天

    [LV.6]常住居民II

    发表于 2014-6-10 09:42:09 |显示全部楼层
    谢谢楼主分享
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-10 22:53 , Processed in 0.123885 second(s), 14 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部