这是一本Linux下C++通信架构实战书籍,针对于C/C++语言已经掌握的很熟并希望进一步深造以将来用C++在Linux下从事网络通信领域/网络服务器的开发和架构工作。包括如下内容:(1)项目本身是一个极完整的多线程高并发的服务器程序;(2)按照包头包体格式正确的接收客户端发送过来的数据包,完美解决收包时的数据粘包问题;(3)根据收到的包的不同来执行不同的业务处理逻辑;(4)把业务处理产生的结果数据包正确返回给客户端。
目录
第1章课程介绍
1.1本书内容详细介绍
1.1.1内容总述
1.1.2为什么选择Linux操作系统平台
1.1.3讲解规划和学习建议
1.1.4书籍推荐和读书须知
1.2环境搭建详细介绍
1.2.1Windows下的Visual Studio 2019安装
1.2.2准备一个Word文档
1.2.3Windows下的虚拟机安装
1.2.4在虚拟机中安装Linux操作系统
1.2.5配置固定IP地址
1.2.6配置远程连接
1.2.7安装编译工具gcc、g++等
1.2.8共享一个操作目录
第2章进入Nginx之门
2.1Nginx简介、选择理由、安装和使用
2.1.1Nginx简介
2.1.2为什么选择Nginx
2.1.3安装Nginx,搭建Web服务器
2.1.4Nginx的启动和简单使用
2.2Nginx整体结构、进程模型
2.2.1Nginx的整体结构
2.2.2Nginx进程模型细说
第3章Nginx开发初步
3.1学习Nginx源码前的准备工作
3.1.1Nginx源码总述
3.1.2Nginx源码查看工具
3.1.3Nginx源码入口函数定位
3.1.4创建一个自己的Linux下的C语言程序
3.2Nginx源码学法,终端和进程的关系
3.2.1Nginx源码学习方法
3.2.2终端和进程的关系
3.3信号的概念、认识、处理动作
3.3.1信号的基本概念
3.3.2通过kill命令认识一些信号
3.3.3进程的状态
3.3.4常用信号列举
3.3.5信号处理的相关动作
3.4UNIX/Linux体系结构、信号编程初步
3.4.1UNIX/Linux操作系统体系结构
3.4.2signal函数范例
3.5信号编程进阶、sigprocmask范例
3.5.1信号集(信号屏蔽字)
3.5.2信号相关函数
3.5.3sigprocmask等信号函数范例演示
3.6fork函数详解、范例演示
3.6.1简单认识fork函数
3.6.2进一步认识fork函数
3.6.3完善fork代码
3.6.4一个和fork执行有关的逻辑判断
3.6.5fork失败的可能原因
3.7守护进程详解、范例演示
3.7.1普通进程运行观察
3.7.2守护进程基本概念
3.7.3守护进程编写规则
3.7.4守护进程不会收到的信号
3.7.5守护进程和后台进程的区别
第4章服务器程序框架初步
4.1服务器程序目录规划、makefile编写
4.1.1信号高级认识范例
4.1.2服务器架构初步
4.2读配置文件、查泄漏、设置标题实战
4.2.1基础设施之配置文件读取
4.2.2内存泄漏的检查工具
4.2.3设置进程名称(标题)
4.3日志打印实战,优化main函数调用顺序
4.3.1基础设施之日志打印实战代码一
4.3.2设置时区
4.3.3基础设施之日志打印实战代码二
4.3.4理顺main函数中代码执行顺序
4.4信号、子进程实战,文件I/O详谈
4.4.1信号功能实战
4.4.2Nginx中创建worker子进程
4.4.3日志输出重要信息讲解
4.4.4write函数思考
4.4.5掉电导致write写入的数据丢失破解法
4.4.6标准I/O库
4.5守护进程及信号处理实战
4.5.1守护进程功能的实现
4.5.2信号处理函数的进一步完善(避免僵尸子进程)
第5章网络通信实战
5.1C/S、TCP/IP妙趣横生、惟妙惟肖谈
5.1.1客户端与服务器端
5.1.2网络模型
5.1.3最简单的客户端和服务器程序实现代码
5.1.4TCP和UDP的区别
5.2TCP三次握手详析,telnet、Wireshark示范
5.2.1TCP连接的三次握手
5.2.2telnet工具使用介绍
5.2.3Wireshark监视数据包
5.2.4TCP断开的四次挥手
5.3TCP状态转换,TIME_WAIT详解,SO_REUSEADDR
5.3.1TCP状态转换
5.3.2TIME_WAIT状态
5.3.3SO_REUSEADDR选项
5.4listen队列剖析、阻塞与非阻塞、同步与异步
5.4.1listen队列剖析
5.4.2阻塞与非阻塞I/O
5.4.3异步与同步I/O
5.5监听端口实战、epoll介绍及原理详析
5.5.1监听端口
5.5.2epoll技术简介
5.5.3epoll原理与函数介绍
5.6通信代码精粹之epoll函数实战1
5.6.1提醒注意
5.6.2配置文件的修改
5.6.3epoll函数实战
5.7通信代码精粹之epoll函数实战2
5.7.1ngx_epoll_process_events函数调用位置
5.7.2ngx_epoll_process_events函数内容
5.7.3ngx_event_accept函数内容
5.7.4总结和测试
5.7.5事件驱动总结
5.7.6一道腾讯后台开发的面试题
5.8ET、LT深释,服务器设计、粘包解决
5.8.1ET、LT模式深入分析及测试
5.8.2本项目的服务器设计
5.9通信代码精粹之收包、解包实战
5.9.1收包分析及包头结构定义
5.9.2收包状态宏定义
5.9.3收包实战代码
5.9.4测试服务器收包避免推诿扯皮
第6章服务器业务逻辑处理框架
6.1业务逻辑之多线程、线程池实战
6.1.1学习方法
6.1.2多线程的提出
6.1.3线程池实战代码
6.1.4线程池的使用
6.2业务逻辑之打通业务处理脉搏实战
6.2.1线程池代码调整及补充说明
6.2.2线程池实现具体业务之准备代码
6.2.3threadRecvProcFunc成员函数讲解
6.2.4整体测试工作的开展
6.3预发包,多线程资源回收深度思考
6.3.1业务逻辑细节写法说明
6.3.2连接池中连接回收的深度思考
6.3.3程序(进程)退出时线程的安全终止
6.3.4epoll事件处理的改造
6.3.5连接延迟回收的具体应用
6.4LT发数据机制深释、gdb调试浅谈
6.4.1水平触发模式(LT)下发送数据深度解释
6.4.2gdb调试浅谈
6.5发数据、信号量、并发、多线程综合实战
6.5.1发送数据指导思想
6.5.2发送数据代码实战
6.5.3发送数据后续处理代码
第7章画龙点睛之服务器安全与完善
7.1过往总结、心跳包代码实战
7.1.1前面学习的总结
7.1.2心跳包概念
7.1.3心跳包代码实战
7.2控制连入数,黑客攻击防范及畸形包应对
7.2.1控制并发连入数量
7.2.2黑客攻击的防范
7.2.3超时直接踢出服务器的需求
7.3超负荷安全处理、综合压力测试
7.3.1输出一些观察信息
7.3.2遗漏的安全问题思考
7.3.3压力测试前的准备工作
7.3.4压力测试
7.4惊群、性能优化大局观
7.4.1CPU占比与惊群
7.4.2性能优化大局观
7.4.3性能优化的实施
7.4.4配置最大允许打开的文件句柄数
7.4.5内存池补充说明
第8章总结与展望
8.1遗留问题探讨增补之消息跳跃发送
8.1.1调整ngx_write_request_handler函数的代码顺序
8.1.2消息的跳跃发送
8.2结束语、课程总结
8.2.1本书概要总结
8.2.2技术总结
8.2.3项目的用途总结
8.2.4学习方法总结
8.2.5架构师之路
8.2.6代码统计与再见