

1.socket套接字封装--模板方法模式

就是子类调用父类的BuildListenSocket()函数,然后调用过程中会调用自己重写的SockOrDie!

服务器轮廓


2.自定义协议
轮廓--

继续完善服务器的内容
//服务器把任务交给上层协议来处理




接下来完善protocal协议模块内部处理方法就好了

Jsoncpp可以处理序列反序列化

1-完善序列化serizlize工作+读取完整性


2.完善Protocal模块的GetRequest方法


接下完善到计算模模块的任务处理方法










接下来客户端


守护进程化



改写我们的Daemon.hpp

cpp
#include"Netcal.hpp"//业务处理
#include"Protocal.hpp"//序列反序列,完整报文
#include "Tcpserver.hpp"//套接字
#include <memory>
#include"Daemon.hpp"
#include"Log.hpp"
//./tcpserver 8080
int main(int argc, char *argv[])
{
if (argc != 2)
{
std::cout << "你应该这样使用./tcpserver 8080" << std::endl;
exit(USAGE_ERR);
}
std::cout<<"服务器启动,父进程将退出,子进程执行后续代码"<<std::endl;
logger.SwitchFile();//文件方式显示日志!
//守护进程化
//子进程变成独立会话
Daemon(1,0);
LOG(LogLevel::INFO)<<"守护进程成功";//默认是向标准输出1里打印的,但我们重定向到文件里了dev/null
//1.顶层
std::unique_ptr<Cal> cal=std::make_unique<Cal>();
//2.协议层
std::unique_ptr<Protocal> protocal = std::make_unique<Protocal>([&cal]( Request req)->Response{
//调用业务处理模块的方法
return cal->Execute(req);
});
//3.服务层 --把任务交给上层协议来处理
std::unique_ptr<TcpServer> tsvr=std::make_unique<TcpServer>(std::stoi(argv[1]),
[&protocal](std::shared_ptr<Socket>& sock,InetAddr& client){
protocal->GetRequest(sock,client);
});
tsvr->Start();
return 0;
}
完。