Tinywebserver学习

学习webserver


前言

用于学习和练习网络编程、linux编程、c++后台开发。


一、流程分析

该系统是实现浏览器(客户端)与服务端之间通过http报文的通信,
在这里插入图片描述
实现通信的方式是同步I/O模拟Reactor模式。
在这里插入图片描述

二、基础知识

1.IO多路复用

BIO模型:阻塞,多线程,消耗CPU资源
非阻塞忙轮询:多线程,占用更多的CPU资源
IO多路复用(NIO模型):用一个代理线程去等待,select/poll只会告诉你有多少个进程到达,不会告诉你哪些进程。epoll则会告诉你是哪些进程。

2.两种高效的事件处理方式

同步IO的Reactor模式:读写事件由线程(需要唤醒线程池)处理,进入请求队列(处理事件的队列)
异步IO的Proactor模式:读写事件由系统线程或主线程处理,通过信号来通知是否处理好了,不用进入请求队列。

3.Socket函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、代码解读

以程序的运行过程来解读

1.主函数

代码如下:

 WebServer server(
        1316, 3,            /* 端口 ET模式 */
        12, 6              /* 连接池数量 线程池数量 */
        );

 server._Start();
 //构造函数初始化,参数分别为端口信息,选择了ET模式,连接池数量。start开启服务器

2.构造函数

代码如下:

//在实例初始化端口号、ET模式、文件路径、监听文件描述符、用户数量。
WebServer::WebServer(
	int port, int trigMode,
	int connPoolNum, int threadNum) :
	port_(port), isClose_(false),
	threadpool_(new ThreadPool(threadNum)), epoller_(new Epoller())
{
   
	srcDir_ = getcwd(nullptr, 256); //获取当前的工作路径
	assert(srcDir_);
	strncat(srcDir_, "/resources/", 16);
	HttpConn::userCount = 0;
	HttpConn::srcDir = srcDir_;
	InitEventMode_(trigMode);//设置ET模式
    if(!InitSocket
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值