“Web 服务器” 笔记02 ------ main.cpp 程序

本文详细介绍了Web服务器中Proactor模式的应用,通过同步I/O模拟实现Proactor模式的工作流程,并讲解了main.cpp的工作流程,涉及IP地址与端口号、SIGPIPE信号处理、端口复用、INADDR_ANY的含义以及EPOLLONESHOT事件。此外,还讨论了如何处理客户端异常断开的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、Proactor 模式

2、main.cpp 工作流程

3、IP 地址与端口号

4、网络编程中的SIGPIPE信号

5、端口复用

6、"将sin_addr设置为INADDR_ANY"的含义是什么?

7、EPOLLONESHOT事件

参考文献

附录


本部分主要整理 “ Web 服务器 ” 项目整体流程以及其中遇到的一些典型问题。

1、Proactor 模式

本服务器程序处理 I/O 事件采用 Proactor 模式,Proactor 模式将所有 I/O 操作都交给主线程和内核来处理(进行读、写),工作线程仅仅负责业务逻辑。使用同步 I/O 方式模拟出 Proactor 模式。原理是:主线程执行数据读写操作,读写完成之后,主线程向工作线程通知这一 ” 完成事件“。那么从工作线程的角度来看,它们就直接获得了数据读写的结果,接下来要做的只是对读写的结果进行逻辑处理。

使用同步 I/O 模型(以 epoll_wait为例)模拟出的 Proactor 模式的工作流程如下:
1. 主线程往 epoll 内核事件表中注册 socket 上的读就绪事件。
2. 主线程调用 epoll_wait 等待 socket 上有数据可读。
3. 当 socket 上有数据可读时,epoll_wait 通知主线程。主线程从 socket 循环读取数据,直到没有更多数据可读,然后将读取到的数据封装成一个请求对象并插入请求队列。
4. 睡眠在请求队列上的某个工作线程被唤醒,它获得请求对象并处理客户请求,然后往 epoll 内核事件表中注册 socket 上的写就绪事件。
5. 主线程调用 epoll_wait 等待 socket 可写。
6. 当 socket 可写时,epoll_wait 通知主线程。主线程往 socket 上写入服务器处理客户请求的结果。

 同步 I/O 模拟 Proactor 模式的工作流程: 

2、main.cpp 工作流程

main.cpp 中的线程为主线程,线程池中的线程为工作线程。当主线程监听到有客户端时,交给 conn 来完成读/写。工作线程仅仅负责业务逻辑。

  • users.init( ) 函数主要是将得到的新客户端的文件描述符添加到 epoll 实例 m_epollfd 中
  • 关闭连接,主要就是将对应的 sockfd 从 m_epollfd 中删除

3、IP 地址与端口号

在 TCP/IP 协议族中,IP 地址是唯一表示一台计算机的标识号。计算机的 IP 地址如同人的身份证一样,都是独一无二的。IP 地址是 32 位的二进制数,通常被分割为 4 个 “ 8位二进制数 ” ,即点分十进制表示(如:10.20.22.196)。

要使网络中的计算机进行通信,通过 IP 地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定端口号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值