第一范文网 - 专业文章范例文档资料分享平台

goAhead3.4.3源码分析

来源:用户分享 时间:2025/5/31 14:21:53 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

设置系统启动数 系统开始计时 设置并打开系统日志 设置文件系统限制 系统设置 初始化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-》socket socketAlloc();分配一个socket结构(及其相关操作)并记录(通过socketList[]) socketInfo();配置socket相关的信息 socket();socket基本函数,设置socket setsockopt();socket基本函数,设置socket可复用 bind();socket基本函数,绑定socket listen();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 循环检查cgiList[]

websCgiGatherOutput();处理对应的cgi(响应的函数和文件) checkCgi();检测cgi进程是否还存在 存在则继续调用websCgiGatherOutput();处理

第二层中websRunEvents

callEvent()按照时间到来的顺序,依次检查调用此函数。 第三层callEvent()

调用callbacks[]中对应的注册函数。

四、处理流程分析

GoAhead服务器File HandlerRequestAction HandlerJavaScript HandlerCGI HandlerFrom data浏览器HTTPCoreLoginSession StateRouterAuthentication FrameworkSSLPortable Runtime GoAhead组件协同处理请求

/HTTP_Core/Request Router/Session State/Action Handler/File Handler/JavaScript Handler/CGI Handler/ : Browser1 : request()2 : socketEvent()3 : websRunRequest()4 : websGetSession()5 : websActionOpen()6 : websFileOpen()7 : websResponse()8 : websJstOpen()10 : websCgiOpen()9 : jsEval()12 : websDone()11 : launchCgi()13 : websCgiPoll()14 : response()

Request处理流程图

搜索更多关于: goAhead3.4.3源码分析 的文档
goAhead3.4.3源码分析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0q43y4873i9pg7y7h9wg_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top