muduo库源码分析2——QueryServer服务器启动流程

muduo网络库中,基于google::protobuf数据标准的网络服务器实例,放在example/protobuf/codec中。

QueryServer服务器的功能:
1) 接收客户端Tcp连接及收发数据
2) 从Tcp数据报中解析出protobuf::message数据报
3) 解析message并分发不同请求 

        根据muduo设计模式,以上每一个功能均可以看做网络服务中的一层。如处理连接请求及数据收发的交给TcpServer对象,从Tcp数据报中解析出protobuf::message数据报交给ProtobufCodec对象,解析message并分发不同请求交给ProtobufDispatcher对象。下图表明QueryServer对象及其成员对象函数间关系:


于是当检测到socketreadable事件时,事件句柄的调用层次为:

>.../*socket读取Tcp数据报*/
>TcpServer::messageCallback_() 即 ProtobufCodec::onMessage() //读取成功时调用
| .../*Tcp数据报中解析出protobuf::message数据报*/
| >ProtobufCodec::messageCallback_() 即 ProtobufDispatcher::onMessage() //message解析成功时调用
| | >if (message请求有效)
| | | >onQuery() or onAnswer()...
| | >else // if (message请求无效)| | | >onUnknownMessage()