1 Star 5 Fork 2

Jhao / 学习C++,项目高并发内存池与自主实现HTTP服务器

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
HttpServer.hpp 1.66 KB
一键复制 编辑 原始数据 按行查看 历史
Jhao 提交于 2022-07-31 10:18 . 自主实现HTTP服务器
#pragma once
#include<string>
#include<signal.h>
#include"ThreadPool.hpp"
#include"TcpServer.hpp"
using std::string;
using std::cout;
using std::endl;
#define PORT 8081
////////////////////////////////////////////////////////////////////////////////////////////////////
///HttpServer主要负责使用TcpServer单例对象,接受链接,每一个链接创建一个任务放入线程池当中
////////////////////////////////////////////////////////////////////////////////////////////////////
class HttpServer
{
private:
int _port = PORT; //端口号这里传给TcpServer比较好
int _lsock;//通过TcpSever建立好之后调用对应接口获取
bool stop;//表明服务器是否运行
public:
HttpServer(int port = PORT):_port(port),stop(false)
{}
~HttpServer()
{}
void InitServer()
{
//由于父进程作为写端的时候读端关闭会导致Server端崩溃
signal(SIGPIPE,SIG_IGN);
}
void Loop()
{
//专门负责底层通信协议的对象
TcpServer* inst = TcpServer::GetInstance(_port);
_lsock = inst->GetSocket();
//accept的参数为输入输出性
LOG(INFO,"Loop begin");
while(!stop)
{
struct sockaddr_in peer;
socklen_t len = sizeof(peer);
int accept_fd = accept(_lsock,(struct sockaddr*)&peer,&len);
//获取新链接
if(accept_fd < 0)
{
perror("accept");
continue;
}
//避免值拷贝的时候这个值也被修改
int* sock = new int(accept_fd);
//使用内存池进行处理任务
Task t(sock);
ThreadPool::GetInstance()->PutTask(t);
}
}
};
1
https://gitee.com/wuyi-ljh/test-43---testing.git
git@gitee.com:wuyi-ljh/test-43---testing.git
wuyi-ljh
test-43---testing
学习C++,项目高并发内存池与自主实现HTTP服务器
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891