CN107911416B - 一种基于嵌入式系统的Boa服务器改进方法 - Google Patents
一种基于嵌入式系统的Boa服务器改进方法 Download PDFInfo
- Publication number
- CN107911416B CN107911416B CN201711001980.7A CN201711001980A CN107911416B CN 107911416 B CN107911416 B CN 107911416B CN 201711001980 A CN201711001980 A CN 201711001980A CN 107911416 B CN107911416 B CN 107911416B
- Authority
- CN
- China
- Prior art keywords
- request
- post
- data
- boa
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于嵌入式系统的Boa服务器改进方法,该方法包括:Boa接收一次新的请求,获取当前请求的状态,并读取HTTP头部以判断该请求的类型,若判别请求为GET方法,并进行应用层相应处理;若判别请求为POST方法,则查看当前HTTP状态是否为WRITE_BODY状态,若不是,则说明POST请求的数据还在接收中,则处于READ_BODY状态;当POST请求数据接收完毕后,处于WRITE_BODY状态,判别该POST请求是否为CGI程序,若为CGI程序,则采用Boa服务器原有方法处理;若为非CGI程序,则采用非CGI程序处理方法。本发明解决了Boa服务器无法满足来自客户端的请求为POST形式,且该POST请求只需要本地服务器处理的时候,Boa服务器仍然fork出子进程来执行,从而增加内存消耗,影响系统运行的问题。
Description
技术领域
本发明属于信息技术领域,具体涉及一种基于嵌入式系统的Boa服务器改进方法,特别涉及Boa服务器对HTTP请求的处理方式。
背景技术
目前基于HTTP协议的用户浏览器已被广泛使用,用户普遍接受以浏览器为操作界面的产品。为了实现嵌入式录播系统中的数据可靠,有效和独立地传输,以及方便用户使用简单的网页浏览器对录制系统进行操作,在嵌入式系统中一般采用HTTP协议实现用户与设备的交互。Linux的Web服务器有Httpd、Apache、Thttpd、Boa等,Boa服务器相对其他几种服务器来说,响应速度更快,更安全,并且Boa所需的资源和能量损耗最少,所以非常适合作为嵌入式Web服务器。
Boa服务器是一个单任务的Web服务器,当Boa服务器处理多个请求的时候,并不会fork出多个子进程对多个请求进行处理,而是依次完成来自客户的请求。也正是由于它不需要更多的系统资源处理多个请求,所以消耗的系统资源非常小。Boa在并发量较多的大型服务器应用场景的情况下,无法完成每个响应,但在嵌入式系统中,Boa服务器的效率已经足够满足要求。Boa服务器处理CGI请求的时候,会结合CGI可执行文件进行响应。因此从Boa的运行特点与嵌入式的系统资源进行分析,Boa服务器应用在嵌入式设备上,具备较大的优势。通过对Boa源码的分析发现,Boa对POST请求的处理方法采用的是CGI程序处理。采用CGI程序处理的应用中,请求的URL必须指定服务器目录下的CGI程序,而在执行CGI程序时,Boa服务器需要fork出一个子进程来执行CGI程序。这种情况下,当来自客户端的POST请求只需要服务器本身处理,而不需要再fork出子进程时,会出现内存资源浪费的现象。
发明内容
本发明的目的是为了克服现有技术中的不足,提供一种基于嵌入式系统的Boa服务器改进方法,解决了Boa服务器无法满足来自客户端的请求为POST形式,且该POST请求只需要本地服务器处理的时候,Boa服务器仍然fork出子进程来执行,从而增加内存消耗,影响系统运行的问题。
本发明的目的是通过以下技术方案实现的:
一种基于嵌入式系统的Boa服务器改进方法,该方法包括:
Boa接收一次新的请求,获取当前请求的状态,并读取HTTP头部以判断该请求的类型,若判别请求为GET方法,并进行应用层相应处理;若判别请求为POST方法,则查看当前HTTP状态是否为WRITE_BODY状态,若不是,则说明POST请求的数据还在接收中,则处于READ_BODY状态;当POST请求数据接收完毕后,处于WRITE_BODY状态,判别该POST请求是否为CGI程序,若为CGI程序,则采用Boa服务器原有方法处理;若为非CGI程序,则采用非CGI程序处理方法。
所述判别请求为GET方法,则进行应用层相应处理,通过在哈希表中找到处理此GET方法的API进行处理,并返回HTTP响应。
所述采用Boa服务器原有方法处理,是通过调用init_cgi函数对CGI的环境变量进行设置,为CGI程序的执行打下基础。
所述非CGI程序处理方法是通过在哈希表中获取处理此POST请求的处理API,从post_data_fd中获取HTTP包体的数据,再进行系统的响应处理,返回响应结果到客户端。
与现有技术相比,本发明的技术方案所带来的有益效果是:
本发明方法通过对Boa的改进,使得Web服务器能够兼容更多的HTTP请求类型,除了GET、POST等常用的HTTP请求外,增加兼容CGI程序的功能使系统的网络接口更丰富,尤其在音视频文件的上传与下载方面能够提供可靠的保障和更加快捷的方式。改进的Boa框架完全适用于其他的嵌入式系统,因此具有广泛的应用意义。
附图说明
图1是现有技术中标准的Boa服务器工作流程。
图2是本发明改进后的Boa服务器工作流程。
具体实施方式
下面结合附图对本发明作进一步的描述。
Boa服务器的工作原理如下:对Boa的源代码进行简单的分析,为搭建嵌入式Web服务器做基础。Boa开始运行,读入配置文件boa.conf,进行一系列的初始化后,以服务器的形式启动Socket,绑定HTTP的默认端口80,接着监听远端的HTTP或HTTPS请求。当Socket接收到请求数据后,把数据存储到HTTP格式的结构体request中,这时会将请求的远端IP地址、端口等基本的信息写进结构体,并把该结构体节点添加到待处理队列中。
Boa接收完HTTP请求数据,对请求的HTTP头部信息进行解析,如果头部信息没有通过服务器的HTTP认证,则直接丢弃此次请求的数据;如果头部信息通过则继续判断此次请求的类型,如果不是CGI程序,则认为是静态页面的请求数据,故直接对本次的请求进行处理并返回HTTP响应;如果请求是CGI程序,则调用init_cgi函数在服务器端进行相应的处理。
通过对Boa源码的分析发现,Boa对POST请求的方法采用的是CGI程序处理。在采用CGI程序处理的应用中,请求的URL必须指定服务器CGI目录下特定的CGI处理程序,而这种情况下无法满足只需要服务器本身处理POST请求。
本发明的目的是通过提出一种基于嵌入式系统的Boa服务器改进方法,旨在使改进后的Boa支持POST请求的非CGI处理,这样Boa服务器在处理只需要服务器本身处理的POST请求时,不需要再fork出子进程进行处理,从而减少系统中的进程数,降低系统消耗的内存。
图1为现有技术中标准的Boa服务器工作流程示意图,该方法包括以下步骤:
步骤101:Boa服务器首先从套接字Socket中获得请求信息get_request;
步骤102:Boa服务器完成对HTTP的头部数据的接收,根据当前的HTTP请求数据对请求的HTTP头部信息进行解析;
步骤103:Boa服务器对HTTP头部信息进行认证,通过HTTP头部信息,Boa服务器可以获知发送HTTP当前请求的客户端浏览器类别,如果HTTP当前请求的浏览器类别和服务器处理的浏览器类别不相符,则该HTTP请求不能通过认证,Boa服务器直接丢弃该请求数据,结束本次连接;如果HTTP当前请求的浏览器类别和服务器处理的浏览器类别相符合,则该HTTP请求通过认证;
步骤104:HTTP请求通过Boa服务器的认证,判断请求的数据是否为CGI程序;
步骤105:如果不是CGI程序,则Boa服务器认为是静态页面的请求数据,Boa服务器对静态页面的处理是通过函数init_get,然后将处理结果响应填充到request结构体data_mem;
步骤106:如果是针对CGI程序的请求,Boa服务器首先调用init_cgi函数处理CGI请求;
步骤107:Boa服务器在调用init_cgi函数后为CGI程序的运行进行相应环境变量的设置,在设置CGI环境变量的过程中,还需要移植CGIC的源码来开发CGI程序;Boa在init_cgi函数中创建管道进行通信,使CGI程序的输出最终经过管道输出到Boa服务器中,Boa从管道中获取CGI处理结果输出响应到客户端;如果CGI请求的HTTP主体存在数据,那么Boa服务器是把数据保存在request结构体中,当Boa服务器进程利用fork函数创建出子进程来运行CGI程序的时候,需要将HTTP主体数据的句柄重定向到CGI程序的标准输入,那么CGI程序运行的时候可以获取到POST请求的数据,当CGI请求处理完毕并返回响应后,此次HTTP请求完成,监听并等待处理下一次请求;
步骤108:Boa服务器返回处理后的数据到HTTP中;
步骤109:Boa服务器断开与HTTP的连接,结束此次的HTTP访问。
图2为改进后的本发明方法中Boa服务器工作流程图,本发明具体实施方法包含以下步骤:
步骤201:Boa服务器首先从套接字中获得请求信息get_request;
步骤202:Boa服务器完成对HTTP的头部数据的接收,根据当前的HTTP请求数据对请求的HTTP头部信息进行解析;
步骤203:Boa服务器对HTTP头部信息进行认证,通过HTTP头部信息,Boa服务器可以获知HTTP当前请求的客户端浏览器类别,如果当前客户端浏览器类别和HTTP头部信息请求的浏览器类别不相符,则该HTTP请求不能通过认证,Boa服务器直接丢弃此次接收的请求数据,结束本次连接;如果当前客户端浏览器类别和HTTP请求的浏览器类别相符合,则该HTTP请求通过认证;
步骤204:Boa服务器判断HTTP请求是否为POST;
步骤205:如果请求为GET方法,则Boa服务器直接在哈希表中找到处理此GET方法的API进行处理;
步骤206:Boa服务器进行相应的系统调用执行相应的操作。
步骤207:如果该请求是POST方法,则查看当前HTTP状态是否为WRITE_BODY状态;
步骤208:如果HTTP不是WRITE_BODY状态,则说明POST请求的数据还在接收中,处于READ_BODY状态,Boa服务器将继续接收POST请求数据;
步骤209:如果HTTP是WRITE_BODY状态,判断该POST请求是否为CGI程序;
步骤210:如果POST请求为非CGI程序,则在哈希表中获取处理此POST请求的API;
步骤211:Boa服务器从post_data_fd中获取HTTP包体的数据;
步骤212:Boa服务器进行相应的系统调用执行相应的操作;
步骤213:若为HTTP请求为CGI程序,如果是针对CGI程序的请求,Boa服务器首先调用init_cgi函数处理CGI请求;
步骤214:Boa服务器通过调用init_cgi函数对接下来CGI程序的运行设置相应的环境变量,在设置CGI环境变量的的过程中,还需要移植CGIc的源码来开发CGI程序;Boa在init_cgi函数中创建管道进行通信,使CGI程序的输出最终经过管道输出到Boa服务器中,Boa从管道中获取CGI处理结果输出响应到客户端;如果CGI请求的HTTP主体存在数据,那么Boa服务器是把数据保存在request结构体中,当Boa服务器进程利用fork函数创建出子进程来运行CGI程序的时候,需要将HTTP主体数据的句柄重定向到CGI程序的标准输入,那么CGI程序运行的时候就可以获取到POST请求的数据,当CGI请求处理完毕并返回响应后,此次HTTP请求完成,监听并等待处理下一次请求;
步骤215:执行相应的CGI程序;
步骤216:Boa服务器返回处理后的数据到HTTP中;
步骤217:Boa服务器断开与HTTP的连接,结束此次的服务器访问。
本发明并不限于上文描述的实施方式。以上对具体实施方式的描述旨在描述和说明本发明的技术方案,上述的具体实施方式仅仅是示意性的,并不是限制性的。在不脱离本发明宗旨和权利要求所保护的范围情况下,本领域的普通技术人员在本发明的启示下还可做出很多形式的具体变换,这些均属于本发明的保护范围之内。
Claims (3)
1.一种基于嵌入式系统的Boa服务器改进方法,其特征在于,该方法包括:
Boa接收一次新的请求,获取当前请求的状态,并读取HTTP头部以判断该请求的类型,若判别请求为GET方法,并进行应用层相应处理;若判别请求为POST方法,则查看当前HTTP状态是否为WRITE_BODY状态,若不是,则说明POST请求的数据还在接收中,则处于READ_BODY状态;当POST请求数据接收完毕后,处于WRITE_BODY状态,判别该POST请求是否为CGI程序,若为CGI程序,则采用Boa服务器原有方法处理;若为非CGI程序,则采用非CGI程序处理方法,所述非CGI程序处理方法是通过在哈希表中获取处理此POST请求的处理API,从post_data_fd中获取HTTP包体的数据,再进行系统的响应处理,返回响应结果到客户端。
2.根据权利要求 1中所述的一种基于嵌入式系统的Boa服务器改进方法,其特征在于,所述判别请求为GET方法,则进行应用层相应处理,通过在哈希表中找到处理此GET方法的API进行处理,并返回HTTP响应。
3.根据权利要求 1中所述的一种基于嵌入式系统的Boa服务器改进方法,其特征在于,所述采用Boa服务器原有方法处理,是通过调用init_cgi函数对CGI的环境变量进行设置,为CGI程序的执行打下基础。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711001980.7A CN107911416B (zh) | 2018-01-24 | 2018-01-24 | 一种基于嵌入式系统的Boa服务器改进方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711001980.7A CN107911416B (zh) | 2018-01-24 | 2018-01-24 | 一种基于嵌入式系统的Boa服务器改进方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107911416A CN107911416A (zh) | 2018-04-13 |
CN107911416B true CN107911416B (zh) | 2020-09-11 |
Family
ID=61840821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711001980.7A Expired - Fee Related CN107911416B (zh) | 2018-01-24 | 2018-01-24 | 一种基于嵌入式系统的Boa服务器改进方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107911416B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115103040A (zh) * | 2022-07-01 | 2022-09-23 | 厦门汉印电子技术有限公司 | 一种客户端和工控设备及其控制方法、装置和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101409731A (zh) * | 2008-10-09 | 2009-04-15 | 上海第二工业大学 | 通过ie远程对家庭电器设备控制的方法 |
CN102006194A (zh) * | 2010-11-30 | 2011-04-06 | 广东星海数字家庭产业技术研究院有限公司 | 一种基于tr-069协议的家庭网络管理系统及管理实现方法 |
CN103513986A (zh) * | 2013-09-16 | 2014-01-15 | 山东华辰泰尔信息科技股份有限公司 | 一种在无操作系统设备中利用CGI技术实现动态web服务器的方法 |
CN106599003A (zh) * | 2015-10-20 | 2017-04-26 | 镇江华扬信息科技有限公司 | 一种基于汇编的嵌入式Web服务器设计的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9584587B2 (en) * | 2015-02-03 | 2017-02-28 | Fortinet, Inc. | Managing transmission and storage of sensitive data |
-
2018
- 2018-01-24 CN CN201711001980.7A patent/CN107911416B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101409731A (zh) * | 2008-10-09 | 2009-04-15 | 上海第二工业大学 | 通过ie远程对家庭电器设备控制的方法 |
CN102006194A (zh) * | 2010-11-30 | 2011-04-06 | 广东星海数字家庭产业技术研究院有限公司 | 一种基于tr-069协议的家庭网络管理系统及管理实现方法 |
CN103513986A (zh) * | 2013-09-16 | 2014-01-15 | 山东华辰泰尔信息科技股份有限公司 | 一种在无操作系统设备中利用CGI技术实现动态web服务器的方法 |
CN106599003A (zh) * | 2015-10-20 | 2017-04-26 | 镇江华扬信息科技有限公司 | 一种基于汇编的嵌入式Web服务器设计的方法 |
Non-Patent Citations (4)
Title |
---|
The Design of Embedded Video System Based Boa Server;Zhao Hongwei;《INTERNATIONAL CONFERENCE ON COMPUTER SCIENCE and SERVICE SYSTEM》;20120813;全文 * |
基于ARM的嵌入式Web服务器的研究与实现;方国涛;《中国优秀硕士学位论文全文数据库》;20090430;全文 * |
基于B/S架构的嵌入式Web远程监控系统的研究与实现;刘金梅;《中国优秀硕士学位论文数据库》;20130131;全文 * |
基于uClinux下Boa的CGI技术实现;宋丽娟;《现代电子技术》;20091110;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107911416A (zh) | 2018-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9912740B2 (en) | Latency measurement in resource requests | |
US10089143B2 (en) | Dynamic scheduling of tasks for collecting and processing data using job configuration data | |
US9407681B1 (en) | Latency measurement in resource requests | |
CN111026982A (zh) | 智能合约处理方法、计算机设备及存储介质 | |
CN102387354B (zh) | 一种基于嵌入式Web服务器的视频监控系统 | |
CN110224896B (zh) | 一种网络性能数据采集方法、装置及存储介质 | |
WO2019227427A1 (zh) | 文件下载方法、装置及设备/终端/服务器 | |
CN110769009A (zh) | 用户身份认证方法及系统 | |
CN104683457A (zh) | 并发控制的方法及装置 | |
CN110177127B (zh) | 基于grpc框架的数据传输方法、装置及设备 | |
CN107682460B (zh) | 一种分布式存储集群数据通信方法及系统 | |
CN107070752B (zh) | 一种长连接容量的测试方法及测试系统 | |
CN108600377B (zh) | 一种文件下载的暂停方法、装置、终端和存储介质 | |
CN107301084B (zh) | 集群服务器的虚拟机迁移方法、装置、服务器及存储介质 | |
CN107911416B (zh) | 一种基于嵌入式系统的Boa服务器改进方法 | |
CN112261111A (zh) | 一种应用程序内浏览器跨域访问实现方法及系统 | |
CN105607606A (zh) | 一种基于双主板架构的数据采集装置及方法 | |
CN112104679B (zh) | 处理超文本传输协议请求的方法、装置、设备和介质 | |
US20190068478A1 (en) | System and method for collecting performance and usage data from computing devices | |
US9424273B2 (en) | System and method for asynchronous use of a network-based file system | |
JP5961471B2 (ja) | 複数の情報システムおける出力比較方法 | |
CN114745564B (zh) | 服务调度方法及装置 | |
CN113329042A (zh) | 消息处理方法及系统、车联网系统、服务器、电子设备 | |
CN113285920B (zh) | 业务访问方法、装置、设备及存储介质 | |
CN115277202A (zh) | 一种用于安卓app的自动化数据采集系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200911 Termination date: 20210124 |