【asp精品源码栏目提醒】:网学会员鉴于大家对asp精品源码十分关注,论文会员在此为大家搜集整理了“goahead+webserver源码分析详细 - 其它资料”一文,供大家参考学习
转载 goahead webserver 源码分析2011-03-11 17:40:08 分类: 工作 标签: 字号大中小 订阅 1.一个 txt 文本架构图 main --websOpenServer -- websOpenListen --socketOpenConnection --打开 webServer 服务器 -- 初 化 socket_t 结 构 注 册 websAccept 回 调 函 数 socket_tsp-gtaccept websAccept等 --把 socket_t 结构加入数组 socketList --websUrlHandlerDefine --初始化 websUrlHandlerType 结构的 websUrlHandler 数组 --将 urlPrefix 和回调函数绑定在 websUrlHandlerwebsUrlHandlerMax中 --websUrlHandlerDefinewebsDefaultHandler --初始化 websUrlHandlerType 结构的 websUrlHandler 数组 --将 urlPrefix 和回调函数绑定在 websUrlHandlerwebsUrlHandlerMax中 --websFormDefine --初始化 symbol table 结构 sym_t把名字和回调函数名放进 sym_t 结构 --把 sym_t 结构放进 hash 表中 --websAspDefine --初始化 symbol table 结构 sym_t把名字和回调函数名放进 sym_t 结构 --把 sym_t 结构放进 hash 表中 main loop ------socketReady-1 socketSelect-1 1000 --轮询 socketList --轮询 socketList 中的 handlerMask --中的几个变量 --改变 socketList 中的 currentEvents --socketProcess --轮询 socketList --socketReady --socketDoEvent --如果有新的连接来自 listenfd就调用 socketAccept --调用 socketAlloc初始化 socket_t 结构 --把 socket_t 结构加入 socketList 数组 --调用 socket_t sp-gtaccept回调函数 --如果不是新的连接就查找 socketList 数组调用 socket_t sp-gthandler回调函数 -- websAccept --做一些检查 --socketCreateHandlersid SOCKET_READABLE websSocketEvent int wp --把 sid 注册为读事件初始化 socket_t sp-gthandler websSocketEvent 等 更新对应的 socketList 数组handlerMask 值等 websSocketEvent --判断读写操作 --读 websReadEvent --websUrlHandlerRequest -- 查 找 wbsUrlHandler 数 组 调 用 和 urlPrefix 对 应 的 回 调 函 数websFormHandlerwebsDefaultHandler等 --写调用wp-gtwriteSocket回调函数 websFormHandler --跟据 formName 查找 hash 表调用用户定义的函数 websDefaultHandler --处理默认的 URL 请求,包括 asp 页面 --websSetRequestSocketHandler -- 注 册 默 认 的 写 事 件 函 数 wp-gtwriteSocket websDefaultWriteEvent --socketCreateHandlerwp-gtsid SOCKET_WRITABLEwebsSocketEvent int wp --把 sid 注册为写事件初始化 socket_t sp-gthandler websSocketEvent 等 更新对应的 socketList 数组 websDefaultWriteEvent --写数据不包括 asp 页面 2.跟着 main 走 Main 函数很简短,所以可以对他的代码进行一行一行注释,如下: int mainint argc char argv / Initialize the memory allocator. Allow use of malloc and start with a 60K heap. For each page request approx 8KB is allocated. 60KB allows for several concurrent page requests. If more space is required malloc will be used for the overflow. / / 首先分配一个大的内存块(601024 字节),以后只要是以 b 开头的对内存操作的函数都是在这个已经分好的内存块上的操作,这些操作在 Balloc.c 中实现。