代码拉取完成,页面将自动刷新
#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);
}
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。