分析基于epoll的C++高性能webServer代码(二)
C++bind()函数用法
std::bind()函数作为函数的适配器,它可以扩大函数是使用场合,使得函数更加灵活的被使用。
template<class F, class… Args>
bind(F&&f, Args&&… args); |
- 参数:
f 可以是function object,函数指针,函数引用,成员函数指针,或者数据成员的指针。 - 返回值:
function object
可以用std::placeholders::_1等替换函数本身的输入参数
- 举例:
|
- 注意上面的三输入函数
func使用bind替换掉了其中的两个输入参数,仅仅在placeholder的位置提供一个输入 - 注意,当具有多个输入的时候,输入的顺序是按照
std::placeholders::_1、std::placeholders::_2、std::placeholders::_3等的顺序 - 举例:
|
- 注意上面的函数中,fn1的实际输入到func中的参数是
func(13, 2, 1),而输入到fn2中的参数实际上是func(1, 2, 13)
httpServer的成员函数分析
构造函数
- 使用初始化列表初始化成员
tcpserver_,然后将tcpserver_的函数接口全部初始化为HttpServer提供的处理函数
HttpServer::HttpServer(EventLoop *loop, int port) |
HandleNewConnection(TcpConnection *ptcpconn)
- 处理新建立的http连接请求
- 新建一个
HttpSession对象 - 将该对象放入
httpsessionlist_中(httpsessionlist_是一个map,通过TcpConnection映射到httpSession对象)
void HttpServer::HandleNewConnection(TcpConnection *ptcpconn) |
HandleMessage(TcpConnection *ptcpconn, std::string &s)
- 调用
httpsessionlist_中的对象处理信息 - 将同样的数据发送回发送方(回显)
- 处理短链接问题
void HttpServer::HandleMessage(TcpConnection *ptcpconn, std::string &s) |
HttpProcess()的行为:
void HttpSession::HttpProcess() |
HttpServer::HandleClose(TcpConnection *ptcpconn)
- 通过传入的参数
TcpConnecton和map映射找到对应的httpSession - 将
httpSession从列表中删除 - 释放
httpSession占用的内存空间
void HttpServer::HandleClose(TcpConnection *ptcpconn) |
HttpServer::HandleError(TcpConnection *ptcpconn)
- 删除对应的
httpSession同上
void HttpServer::HandleError(TcpConnection *ptcpconn) |
HttpServer::Start()
- 直接调用内部的
tcpserver成员的start函数
void HttpServer::Start() |