一种实用的嵌入式Web服务器设计
2 功能实现
2.1 HTTP连接管理的功能实现
所谓HTTP连接管理,主要是指对连接到服务器端口的socket进行监听、捕获、读写、关闭,以及对HTTP请求报文协议字段的解析和响应报文的生成等操作。其中,BOA可提供完整的HTTP协议数据解析及响应报文生成的功能。因此,对和HTTP连接管理中相关的操作,基本上可直接采用BOA的相关代码,实现起来难度不大。
BOA中的连接状态切换示意图如图3所示。本文引用地址:https://www.eepw.com.cn/article/149122.htm
当程序每次监听到新的socket连接访问接入时,首先对空闲队列进行判断,如果为空,则申请一个request结构空间,并将其插入就绪队列的队头,否则可直接将一个结构空间从空闲队列转入;对当前正在处理的就绪队列成员,当网络阻塞时则将其移入阻塞队列的队头,当访问结束断开连接时,则将该成员的空间信息移入空闲队列;而当对阻塞队列进行轮询时,根据其成员所对应的socket上是有读写请求还是该连接已超时,分别将其移入就绪队列或断开连接移入空闲队列。
以上过程在BOA中主要是通过get_request、fdset_update和process_requests这三个函数来实现的,它们也是实现移植的重点,其他函数则相对简单。在移植过程中,为了适应嵌入式的应用环境,在系统初始化时,给空闲队列分配了足够大的队列空间,并对操作时所涉及的一些动态内存分配的语句和结构进行修改,从而尽量减少连接过程中频繁的内存申请。另外,传统的BOA对每个CGI连接启动新的任务,在此考虑到配置数据的即时生效以及系统资源的节约,仍然在EWS的任务环境中处理该CGI连接。实验证明,这种处理方法简单可行,而且在装置的应用环境中对服务器的性能并无太大影响。
2.2 访问权限管理的功能实现
为了应用时操作的安全性,本文将访问的页面分成两类:一类为配置操作页面,仪供认证用户访问;另一类为设备状态页面,可供任何用户访问。其控制主要是通过对用户IP的判别及访问页面的分类来实现的。首先对用户访问的URL进行解析,如果访问对象为配置操作页面,则需要进行认证,在此通过一个用户权限控制管理结构来对通过权限认证的用户进行维护,并提供一个时间摔制机制,使通过认证的用户在一定时间段内可持续有效的对服务器进行访问。如果当前客户端(访问者IP)在用户权限控制结构内,且未超时,则通过认证,由服务器根据本次申请的URL返回相应页面;若超时则需要对本次访问的URL进行重定向,返回密码校验页面,给用户提供密码输入的接口。如果访问页面为设备状态页面,则无需进行认证,直接由URL返回相应页面即可。访问权限认证程序流程如图4所示。
评论