goAhead3.4.3源码分析.doc_第1页
goAhead3.4.3源码分析.doc_第2页
goAhead3.4.3源码分析.doc_第3页
goAhead3.4.3源码分析.doc_第4页
goAhead3.4.3源码分析.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

goAhead3.4.3源码分析2014-12-22一、架构分析1、goAhead的作用一款开源的嵌入式web服务器系统。2、goAhead的特点goAhead则是专门针对嵌入式实时操作系统(RTOS)的webserver。他支持:SOAP客户端:简单对象访问协议。XML-RPC客户端:Flash客户端:性能指标:内存小:不包含ssl为60k,包含为500k响应速度:24MHZ下可有:20次/秒的响应速度266MHZ可有:50次/秒的响应。支持技术:ASP,嵌入式JSP,CGI,CGI处理GoFroms,扩展API,web页面可存在rom中。支持多种操作系统:vxWorks,linux,WinCE等。来源基于VxWorks的WebServer研究和实现3、GoAhead工作原理浏览器goAhead web服务器HTML JavaScript嵌入式系统应用GoAhead web服务器总体结构浏览器GoAhead web服务器HTML解析器Script解析器From生成器HTTP引擎顶层通讯TCP/IP协议底层通讯TCP/IP协议HTTP引擎HTML生成器浏览页面From解析器处理器GoAhead Web服务器体系结构浏览器嵌入式设备GoAhead web服务器CGI程序客户端发出请求激活CGI程序服务器返回结果返回处理结果CGI工作原理4、GoAhead涉及的角色(关键组件)猜想:浏览器:应用:处理器:接收、发送、监听、转发器转发器:拦截(get,post,forward)、分析、转发(转发规则)安全日志记录主机日志处理器(操作函数)官网(关键组件):1、GoAhead HTTP Core :GoAhead HTTP 核心,包括HTTP协议处理,socket连接管理和其日志记录。2、Request Router :请求路由,将用户的相关请求转发给相应的请求句柄。3、Portable Runtime : 轻便运行层。跨平台,单线程,非阻塞,事件驱动的轻量级运行层。主要负责:内存分配,安全字符句柄,链表,哈希,命令执行,socket通讯,事件,计时器,调试追踪,日志。4、Authentication Framework :认证框架。可拔插的认证,支持基本的,联通,网页基本表格的认证。5、Session State :会话状态。会话状态存储。每个用户的状态和cookie的管理。6、Action Handler :动作句柄。动作句柄绑定URI到c处理函数。7、File Handler :文件句柄。服务于静态的文件:HTML,图片,pdf。8、JavaScript Handler: js句柄。嵌入式服务器js。9、CGI Handler :cgi句柄。cgi程序。10、Secure Sockets Layer(SSL) :ssl层。5、需要完成的操作1、设置socket2、监听端口3、接收、发送数据4、web处理初始化5、解析url6、转发请求:调用相应的应用7、二、功能分析初始化:initPlatform():啥都没干websOpen()初始化服务器初始化步骤(websOpen函数解析):websOsOpen();生成一个系统启动的随机数(标识系统)。websRuntimeOpen();开始系统计时;logOpen();打开日志;setFileLimits();设置文件系统限制socketOpen();初始化socketList为NULL;setLocalHost();将本机IP设置入server系统;hashCreate();创建一个webshash session websStartEvent();将webshash session其加入callbacks列表中websSetDocuments();设置Document:根目录(全局变量)/以下类似于struct.xmlwebsOpenRoute();设置路由规则(redirect和continue绑定的函数和相应的跳转规则:根据服务器状态码)websCgiOpen();设置cgi的处理函数websOptionsOpen();设置option处理函数websActionOpen();设置action处理函数websFileOpen();设置file处理函数websUploadOpen();设置upload操作处理函数websJstOpen();设置jst和jst write处理函数websOpenAuth();设置验证规则。Login,logout验证函数和相关规则。/绑定函数设置结束websFsOpen();定义ME_ROM则设置相关文件路径websLoad();读取并设置路由和认证配置信息初始化流程图:系统设置网络通讯设置相关操作调用设置文件读取和认证设置系统开始计时设置系统启动数设置并打开系统日志设置文件系统限制初始化socketlist设置server系统IP创建系统会话将系统会话加入监听设置网页根目录设置路由规则(绑定redirect和continue的处理函数)设置cgi规则(绑定cgi的处理函数)设置option规则(绑定option的处理函数)设置action规则(绑定action的处理函数)设置file规则(绑定file的处理函数)设置upload规则(绑定upload的处理函数)设置jst规则(绑定jst的处理函数)设置验证规则(绑定Login,logout的处理函数)定义ME_ROM则设置相关文件路径读取并设置路由和认证配置信息GoAhead初始化流程图(websOpen函数)处理流程:initPlatform():啥都没干websOpen()初始化服务器websLoad()加载认证信息websListen()监听请求websServiceEvents()处理服务事件websClose()关闭服务器初始化服务器websOpen()加载应用websLoad()监听请求websListen()处理事件(发生/计划)websServiceEvents()关闭服务器websClose()GoAhead运行流程退出处理:websClose()关闭服务器异常处理:Logmsg()写日志Return -1;退出三、关键函数解析第一层中(main函数)websListen()监听函数分析socketParseAddress();从语法上分析出IP,port并返回。socketListen();设置socket并监听socketPtr();返回正确的socket:从socketList中设置访问服务器的url,ip,port(放入全局变量listens,等进行监听:select方式)第二层中(socketListen)关键结构体:socketList WebsSocket-socketsocketAlloc();分配一个socket结构(及其相关操作)并记录(通过socketList)socketInfo();配置socket相关的信息socket();socket基本函数,设置socketsetsockopt();socket基本函数,设置socket可复用bind();socket基本函数,绑定socketlisten();socket基本函数,监听socket后续处理socketSetBlock();设置socket到块模式socketSetNoDelay();设置socket非阻塞第三层中:(socketAlloc)wallocObject();依据socketList分配一个socket id将处理函数赋给对应的socketList;其参数中包含accept函数(websAccept):websAccept()处理新连接websAlloc()分配一个初始化后的页面句柄,之后通过webs来保存getsockname()获得socket地址(sockaddr)socketAddress()获得本地IP地址(通过webs结构)。确定是否是本地连接websStartEvent()调用web计划任务(callbacks结构,当时间到来时候checkTimeout函数)。socketEvent()处理web计划或者socket事件:读或写或停止(通过webs结构及其指向的事件)第一层中websServiceEvents函数/循环:socketSelect();监听读写事件,并将发生的事件保存入对应的socketList中。socketProcess();处理刚发生的事件websCgiPoll();处理cgi事件,通过cgiList;websRunEvents();运行计划事件任务,通过callbacks;min();设置delay时间/第二层中socketProcess循环检查socketList 若有事件,则调用socketDoEvent();处理socket事件第三层中socketDoEvent()socketAccept();处理新连接(callback回调发起的)检查socket是否仍然有效第四层socketAccept()accept()socket基本函数,接收新连接。(WebsSocket结构传递socket)加入到socketList中进行监听设置为block阻塞模式,根据情况可设置为非阻塞模式。socketAddress()获取用户地址调用相应的websaccept();第二层中websCgiPoll循环检查cgiListwebsC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论