- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一种嵌入式Web服务器设计方案
一种嵌入式Web服务器设计方案 摘要:基于嵌入式ARM-Linux平台,提出了一种Web服务器的设计方案与实现方法,采用Socket编程实现Http协议解析及网络通信,设计了多进程并发请求处理机制,支持html页面和执行CGI程序。在S3C2440硬件平台上测试,能够正确的响应Http远程请求,可用于嵌入式设备的远程控制。
关键词:Web服务器;Socket编程;Http请求;远程控制
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)10-2206-03
Abstract: Discusses the design proposal and implementation of Web server based on embedded ARM-Linux platform, Http data package analyzing and network communication are accomplished via socket programming, then put forward the mechanism for the multi-process concurrent request, can support HTML page and the execution of a CGI program. At last testing the implementation on the S3C2440 platform, the web server work well in responsing to the Http remote request, therefore can be used for remote control of embedded devices.
Key words: Web server; Socket programming; Http request; remote control
随着嵌入式系统在工业现场、环境监控等领域的应用逐渐广泛,越来越多的场合需要通过网络对嵌入式设备进行远程控制,因此在基于ARM-Linux平台的解决方案中就需要设计适合于嵌入式设备的Web服务器。当前比较成熟的Web服务器软件如Apache、Nginx、Lighttpd等功能较为完备,占用资源也较多,适合在PC或服务器上运行;比较精简的Web服务器如Boa、thttpd等,运行系统开销较小,很多应用场景中被移植到了嵌入式平台,但一般实现为单进程服务器,当前用户请求处理完成后才能响应下一个用户的请求,不具备并发处理功能。
针对当前Web服务器存在的问题,该文提出一种适合于嵌入式平台的实现方案,考虑到嵌入式平台存在硬件资源限制,设计方案时考虑:1)功能实现精简,支持html页面请求和执行CGI程序即可满足远程控制的要求;2)能够并发处理多个用户的同时请求;3)Web服务器软件交叉编译后能够稳定运行且占用资源少。
1 总体设计方案及流程分析
Web服务器在运行期间通过Http协议与浏览器进行通信,浏览器通过输入URL地址或html form表单向Web服务器发出请求,Web服务器进行解析Http协议数据包,提取请求文件信息与表单数据,之后进行处理相应,总体流程如图1所示。
嵌入式Web服务器软件实现采用Linux C编程,在PC上搭建ARM-Linux交叉开发环境,采用makefile文件进行工程构建管理,最后在S3C2440硬件平台上测试。
2 功能模块设计与实现
2.1 多进程并发请求处理机制
文献[4]提出了包括迭代服务器和并发服务器共9种服务器设计模型,这些模型来源于实际工程实践,可作为本文项目实现的参考。考虑到需要处理用户的并发请求,但并发请求的同时连接数较少,同时也要执行CGI程序,故采用为每个客户请求fork一个子进程的并发服务器模型,其流程如下:
1)父进程采用accept函数阻塞接收客户的连接,当有客户请求发生时,该函数返回一个连接套接字connfd进行与客户通信;
2)父进程采用fork系统调用为请求产生一个子进程,由于子进程与父进程共享连接套接字connfd,故子进程通过connfd获取请求Http协议数据包,进行解析后处理html请求或CGI请求,之后通过connfd发送响应数据包,请求处理结束后关闭connfd。
3)父进程需要关闭连接套接字connfd,将导致其描述符的引用计数减1,这样保证了父进程不会耗尽可用的描述符数,另外当子进程关闭connfd时,描述符的计数为0,保证能够正确的向客户发送连接终止序列。
2.2 Http协议数据包请求解析
H
文档评论(0)