POCO库之HTTPServer

本文解析了HTTP服务器的主要组件及其工作流程,包括HTTPRequestHandler、HTTPServerRequest等类的职责与实现细节,以及各种缓冲区的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值