1 / 19
文档名称:

goaheadwebserver源码分析.docx

格式:docx   大小:177KB   页数:19页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

goaheadwebserver源码分析.docx

上传人:cxmckate1 2016/12/27 文件大小:177 KB

下载得到文件列表

goaheadwebserver源码分析.docx

相关文档

文档介绍

文档介绍:goahead webserver 源码分析(2010-01-17 10:12:16) 标签: 杂谈 1. 一个 txt 文本架构图 main() | |--websOpenServer() | |-- websOpenListen() | |--sock etOpenConnection() | |-- 打开 webServer 服务器| |-- 初化 socket_t 结构( 注册 ept() 回调函数(socket_t sp->accept= ept) 等)| |-- 把 socket_t 结构加入数组 socketList || |--websUrlHandlerDefine() | |-- 初始化 websUrlHandlerTyp e结构的 websUrlHandler 数组| |-- 将 urlPrefix 和回调函数绑定在 websUrlHandler[websUrlHandlerMax] 中| |--websUrlHandlerDefine(websDefaultHandler) | |-- 初始化 websUrlHandlerTyp e结构的 websUrlHandler 数组| |-- 将 urlPrefix 和回调函数绑定在 websUrlHandler[websUrlHandlerMax] 中||| |--websFormDefine() | |-- 初始化 symbol tabl e结构 sym_t, 把名字和回调函数名放进 sym_t 结构| |-- 把 sym_t 结构放进 hash 表中| |--websAspDefine() | |-- 初始化 symbol tabl e结构 sym_t, 把名字和回调函数名放进 sym_t 结构| |-- 把 sym_t 结构放进 hash 表中|| |(main loop) ----|--socketReady(-1) || socketSelect(-1, 1000) ^ |-- 轮询 socketList |-- 轮询 socketList 中的 handlerMask || |-- 中的几个变量|-- 改变 socketList 中的 currentEvents ||| |--socketProcess() ^| |-- 轮询 socketList[] || |--socketReady() || |--socketDoEvent() || |-- 如果有新的连接( 来自 listenfd) 就调用 ept() || |-- 调用 socketAlloc() 初始化 socket_ t结构|| |-- 把 socket_ t 结构加入 socketLis t 数组|| |-- 调用 socket_t sp->accept() 回调函数|||| |-- 如果不是新的连接就查找 socketList 数组调用 socket_t sp->handler() 回调函数|||| --| ept() |-- 做一些检查|--socketCreateHandler(sid, SOCKET_READABLE, websSocketEvent, (int) wp) | |-- 把 sid 注册为读事件, 初始化 socket_t sp->handler = websSocketEvent 等, 更新对应的 socketList 数组(handlerMask 值等) websSocketEvent() |-- 判断读写操作|-- 读 websReadEvent() | |--websUrlHandlerRequest() | |-- 查找 wbsUrlHandler 数组, 调用和 urlPrefix 对应的回调函数(websFormHandler(),websDefaultHandler() 等) | |-- 写, 调用(wp->writeSocket) 回调函数 websFormHandler() |-- 跟据 formName 查找 hash 表, 调用用户定义的函数 websDefaultHandler() |-- 处理默认的 URL 请求,包括 asp 页面|--websSetRequestSocketHandler() | |-- 注册默认的写事件函数 wp->writeSocket = websDefaultWriteEvent | |--socketCreateHandler(wp->sid, SOCKET_WRITABLE, websSocketEvent, (int) wp) | |-- 把 sid 注册为写事件, 初始化 socket_t sp->handler = websSocketEvent 等, 更新对应的 socketList 数组 w