POCO库之HTTPServer

来源:互联网 发布:java invoker 编辑:程序博客网 时间:2024/05/16 12:57

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以参数的形式传进去进行各种操作