HTTPRequestHandler->HandleRequest() = 0;
AbstractHTTPRequestHandler:
①实现handleRequest();
②保存Request,Response对象
③先进行必要验证,再调用Run()
HTTPServerRequest : public HTTPRequest
保存value-name
HTTPServerRequestImpl : public HTTPServerRequest
①:添加Response,Session成员变量
②:将Response,Request关联起来
③:读取头信息,并返回关联了session的buffer
HTTPServerResponse, HTTPServerResponseImpl同HTTPServerRequest,HTTPServerRequestImpl 差不多,
只是其动作根据request的情况来决定
HTTPSession : 接收发送数据
HTTPServerSession : public HTTPSession
只添加了一个 bool hasMoreRequest();
TCPServer:
接收n个连接,放入队列中,然后用线程池去处理
HTTPServer : public TCPServer
只增加了一个StopAll()
TCPServerConnection : 只是一个提供处理接口的线程类
HTTPServerConnection::主要实现线程的接口
利用传进来的socket创建一个session对象,然后分别传给Response和Request,
在RequestImpl的构造函数里又用session构造一个HTTPHeaderInputStream,然后用这个对象读取头信息
再根据头信息创建不同的buffer,
然后调用handler函数
而这个handler函数是要自己实现的,参数就是Response和Request,
在这里,根据Request的值设置Response对应的值
根据这两个参数你可以做任何你想的事
关于里面的各种缓冲区:
headerbuffer, chunkedbuffer, fixedlengthbuffer
他们的继承体系都是一样的,
class xxxbfffer
{
各个缓冲区的不同只在于读写的方式不一样
int readFromDevice();
int writeToDevice();
private:
HTTPSession m_session;
};
class xxxIOS : public std::ios
{
xxxbuffer _buffer;
};
class xxxInputStream : public xxxIOS, public std::istream
{
利用pool重载operator new/operator delete
};
class xxxOutputStream : public xxxIOS, std::ostream
{
利用pool重载operator new/operator delete
};
而HTTPClient,只是一个HTTPSession,将Request/Response以参数的形式传进去进行各种操作