新书速览|高性能Linux网络编程核心技术揭秘
liebian365 2024-10-23 13:55 32 浏览 0 评论
实战基于libevent 的FTP服务器、基于epoll的高并发聊天服务器、基于DPDK的应用案例
本书简介
本书详解高性能Linux网络编程的核心技术及DPDK框架,剖析Nginx高性能服务器架构,实战基于libevent 的FTP服务器、基于epoll的高并发聊天服务器、基于DPDK的应用案例、基于P2P架构的高性能游戏服务器。
本书内容
- 详解高性能Linux网络编程核心技术及DPDK框架。
- 剖析Nginx高性能服务器架构。
- 实战基于libevent 的FTP服务器、基于epoll的高并发聊天服务器、基于DPDK的应用案例、基于P2P架构的高性能游戏服务器。可做课程设计和毕业论文素材。可借鉴用来设计商用产品。
- 配套示例源码、作者QQ答疑。
本书读者
BACK TO SCHOOL
本书既适合Linux高性能网络编程初学者、高性能网络服务器开发人员、高并发游戏服务器开发人员等阅读,也适合作为高等院校计算机网络与通信、计算机网络技术等相关专业的教材。
本书作者
朱文伟,名校计算机专业统招硕士。20多年C/C++、Java开发经验,主导开发过密码、图形、人工智能等产品。精通Linux、Windows系统开发及数据库开发技术。著有图书《PyQt 5从入门到精通》《Qt 6.x从入门到精通》《Linux C/C++服务器开发实践》《OpenCV 4.5计算机视觉开发实战:基于Python》《OpenCV 4.5计算机视觉开发实战(基于VC++)》《Linux C与C++ 一线开发实践》《密码学原理与Java实现》《Visual C++2013从入门到精通》。
本书目录
第1章 高性能网络编程概述 1
1.1 来自产品经理的压力 1
1.2 网络高性能需求越来越大 4
1.3 高性能网络报文处理的瓶颈 5
1.4 八仙过海各显神通 8
1.5 Linux内核的弊端 8
1.6 什么是DPDK 9
1.7 高性能服务器框架研究 10
1.7.1 C/S模型 10
1.7.2 P2P模型 11
1.7.3 服务器的框架概述 12
1.7.4 高效的事件处理模式 12
1.7.5 高效的并发模式 14
1.7.6 提高服务器性能的方法 15
第2章 Linux基础和网络 17
2.1 Linux启动过程 17
2.2 图形模式与文字模式的切换方式 19
2.3 Linux关机和重启 20
2.4 开机自启动 21
2.5 查看Ubuntu的内核版本 23
2.6 查看Ubuntu操作系统的版本 23
2.7 查看CentOS操作系统的版本 23
2.8 CentOS 7升级glibc 24
2.9 在文件中搜索 24
2.10 Linux配置文件的区别 24
2.11 让/etc/profile文件修改后立即生效 26
2.12 Linux性能优化的常用命令 26
2.13 测试Web服务器性能 28
2.13.1 架设Web服务器Apache 28
2.13.2 Windows下测试Web服务器性能 30
2.13.3 Linux下测试Web服务器性能 32
2.14 Linux中的文件权限 37
2.15 环境变量的获取和设置 38
2.16 解析命令行参数函数 41
2.17 登录桌面到龙芯服务器 42
2.18 远程桌面到银河麒麟 43
2.19 KVM和Qemu的关系 44
2.20 检查系统是否支持虚拟化 45
2.21 在Ubuntu 22中使用KVM虚拟机CentOS 8 45
2.21.1 安装CentOS 8虚拟机 46
2.21.2 虚拟机和宿主机网络通信 46
2.21.3 通过ssh命令登录到虚拟机 47
2.21.4 通过scp命令向虚拟机Linux传送文件 47
2.21.5 让虚拟机识别到PCI设备 48
2.22 在Ubuntu下安装RPM包 51
2.23 在CentOS中使用KVM虚拟机Ubuntu 22 51
2.23.1 通过图形化终端使用Ubuntu 22 51
2.23.2 通过远程桌面方式使用Ubuntu 22 52
2.23.3 自定义路径安装KVM虚拟机 53
2.23.4 让虚拟机识别到PCI设备 57
2.24 银河麒麟系统中使用虚拟机 58
2.25 网络通信与报文处理 60
2.26 Linux内核的报文处理机制 61
2.26.1 Linux协议栈 61
2.26.2 NAPI技术 62
2.26.3 高性能网卡及网卡多队列技术 62
2.26.4 RPS/RFS技术 63
2.26.5 Linux套接字报文采集 63
2.27 PF_RING高性能报文处理框架 64
2.27.1 PF_RING简介 64
2.27.2 PF_RING非零复制库 64
2.27.3 PF_RING零复制库 66
2.28 DPDK高性能报文处理框架 67
2.28.1 DPDK及其技术优点 67
2.28.2 DPDK库组件 68
2.28.3 PF_RING ZC与DPDK优化技术对比 69
第3章 搭建Linux网络开发环境 70
3.1 准备虚拟机环境 70
3.1.1 在VMware下安装Linux 70
3.1.2 开启登录时的root账号 73
3.1.3 解决Ubuntu上的vi方向键问题 75
3.1.4 关闭防火墙 75
3.1.5 配置安装源 76
3.1.6 安装网络工具包 77
3.1.7 安装基本开发工具 77
3.1.8 启用SSH 77
3.1.9 做个快照 79
3.1.10 连接虚拟机Linux 79
3.1.11 和虚拟机互传文件 93
3.2 搭建Linux下的C/C++开发环境 94
3.3 搭建Windows下的Linux C/C++开发环境 95
3.3.1 Windows下非集成式的Linux C/C++开发环境 95
3.3.2 Windows下集成式的Linux C/C++开发环境 99
第4章 网络服务器设计 103
4.1 I/O模型 104
4.1.1 基本概念 104
4.1.2 同步和异步 104
4.1.3 阻塞和非阻塞 106
4.1.4 同步异步和阻塞非阻塞的关系 108
4.1.5 为什么要采用socket I/O模型 109
4.1.6 (同步)阻塞I/O模型 109
4.1.7 (同步)非阻塞式I/O模型 110
4.1.8 (同步)I/O多路复用模型 111
4.1.9 (同步)信号驱动式I/O模型 112
4.1.10 异步I/O模型 112
4.1.11 五种I/O模型的比较 113
4.2 单进程循环服务器 114
4.2.1 UDP循环服务器 114
4.2.2 TCP循环服务器 118
4.3 多进程并发服务器 121
4.3.1 多进程并发服务器的分类 121
4.3.2 fork函数的使用 122
4.4 多线程并发服务器 127
4.5 I/O多路复用的服务器 131
4.5.1 使用场景 132
4.5.2 基于select的服务器 132
4.5.3 基于poll的服务器 140
4.5.4 基于epoll的服务器 147
第5章 基于libevent的FTP服务器 156
5.1 Reactor模式 156
5.1.1 Reactor模式的优点 157
5.1.2 Reactor模式框架 157
5.1.3 Reactor事件处理流程 159
5.2 使用libevent的基本流程 159
5.3 下载和编译libevent 161
5.4 FTP概述 163
5.4.1 FTP的工作原理 163
5.4.2 FTP的传输方式 163
5.4.3 FTP的工作方式 164
5.4.4 FTP命令 165
5.4.5 FTP应答码 167
5.5 开发FTP服务器 169
5.6 开发FTP客户端 175
5.6.1 客户端需求分析 175
5.6.2 概要设计 176
5.6.3 客户端工作流程设计 176
5.6.4 实现主界面 176
5.6.5 实现登录界面 180
5.6.6 实现登录后的操作界面 180
5.6.7 运行结果 186
第6章 基于epoll的高并发聊天服务器 189
6.1 系统平台的选择 189
6.1.1 应用系统平台模式的选择 189
6.1.2 C/S模式介绍 190
6.1.3 数据库系统的选择 191
6.2 系统需求分析 191
6.3 系统总体设计 193
6.4 即时通信系统的实施原理 194
6.4.1 IM的工作方式 194
6.4.2 IM的基本技术原理 194
6.4.3 IM的通信方式 195
6.5 功能模块划分 195
6.5.1 模块划分 195
6.5.2 服务器端功能 196
6.5.3 客户端功能 196
6.5.4 服务器端多线程 197
6.5.5 客户端的循环等待 197
6.6 数据库设计 197
6.6.1 准备MySQL环境 198
6.6.2 登录MySQL 200
6.6.3 Linux下的MySQL的C编程 203
6.6.4 聊天系统数据库设计 208
6.7 服务器端设计 210
6.7.1 使用epoll模型 210
6.7.2 详细设计 210
6.8 客户端设计 218
第7章 高性能服务器Nginx架构解析 226
7.1 什么是Nginx 226
7.2 Nginx的下载和安装 227
7.3 为何要研究Nginx 228
7.4 Nginx概述 230
7.5 Nginx服务器设计原则 231
7.6 整体架构研究 233
7.6.1 模块化设计体系 233
7.6.2 事件驱动模型 234
7.6.3 进程模型 236
7.6.4 内存池设计 237
7.7 Nginx重要的数据结构 238
7.7.1 ngx_str_t数据结构 238
7.7.2 ngx_array_t数据结构 239
7.7.3 ngx_pool_t数据结构 240
7.8 反向代理和负载均衡 241
7.8.1 Nginx反向代理功能 241
7.8.2 负载均衡的配置 242
7.9 信号机制 243
7.9.1 启动Nginx 243
7.9.2 进程管理 244
7.10 HTTP框架解析 246
7.10.1 HTTP框架工作流程 246
7.10.2 处理引擎 248
7.10.3 过滤引擎 249
7.11 upstream机制的实现 249
第8章 DPDK开发环境的搭建 253
8.1 检查装备 253
8.1.1 基本硬件要求 253
8.1.2 操作系统要求 253
8.1.3 编译DPDK的要求 254
8.1.4 运行DPDK应用程序的要求 254
8.2 虚拟机下编译安装DPDK20 255
8.2.1 为何要配置硬件 255
8.2.2 配置CPU 255
8.2.3 配置内存 256
8.2.4 添加网卡 257
8.2.5 安装和使用Meson 258
8.2.6 下载并解压DPDK 261
8.2.7 配置构建、编译和安装 261
8.2.8 第一个基于DPDK20的DPDK程序 264
8.2.9 大页内存及其设置 267
8.2.10 绑定网卡 276
8.2.11 实现一个稍复杂的命令行工具 282
8.3 虚拟机下命令方式建立DPDK19环境 293
8.4 虚拟机下脚本方式建立DPDK19环境 295
8.5 在CentOS 7.6下建立DPDK19环境 302
8.6 在CentOS 8.2下建立DPDK20环境 313
8.6.1 搭建Meson+Ninja环境 313
8.6.2 基于Meson建立DPDK20环境 315
8.6.3 单步调试DPDK20程序 318
8.6.4 make命令开发DPDK20程序 321
8.7 在国产操作系统下搭建基于万兆网卡的DPDK20环境 326
8.7.1 CentOS 8验证万兆网卡 327
8.7.2 DPDK适配PC国产系统 329
8.7.3 DPDK适配兆芯服务器 332
8.7.4 DPDK适配飞腾服务器 334
第9章 DPDK应用案例实战 337
9.1 实战1:测试两个网口之间的收发 337
9.1.1 搞清楚网卡、网口和端口 337
9.1.2 testpmd简介 338
9.1.3 testpmd的转发模式 338
9.1.4 案例中的使用场景 339
9.1.5 搭建DPDK案例环境 339
9.1.6 运行测试工具 342
9.1.7 testpmd的其他选项 346
9.2 实战2:接收来自Windows的网络包并统计 347
9.2.1 什么是二层转发 347
9.2.2 程序的主要流程 348
9.2.3 主函数实现 348
9.2.4 任务分发的实现 354
9.2.5 程序参数的解析实现 357
9.2.6 转发的实现 358
9.2.7 信号的处理 359
9.2.8 搭建DPDK案例环境 359
9.2.9 编写Makefile并编译 359
9.2.10 在Windows上部署环境 361
9.2.11 运行程序 363
第10章 基于P2P架构的高性能游戏服务器 365
10.1 网络游戏服务器发展现状 366
10.2 现有网络游戏服务器架构 367
10.2.1 Client/Server架构 367
10.2.2 游戏大厅代理架构 368
10.2.3 P2P架构 368
10.3 P2P网络游戏技术分析 369
10.4 网络游戏的同步机制 370
10.4.1 事件一致性 371
10.4.2 时间同步 371
10.5 总体设计 372
10.5.1 服务器系统架构模型 372
10.5.2 传输层协议的选择 374
10.5.3 协议包设计 375
10.6 数据库设计 377
10.7 服务器详细设计和实现 377
10.8 客户端详细设计和实现 386
10.8.1 棋盘类CTable 387
10.8.2 游戏模式类CGame 389
10.8.3 消息机制 391
10.8.4 游戏算法 394
本文摘自《高性能Linux网络编程核心技术揭秘》,获出版社和作者授权发布。
相关推荐
- go语言也可以做gui,go-fltk让你做出c++级别的桌面应用
-
大家都知道go语言生态并没有什么好的gui开发框架,“能用”的一个手就能数的清,好用的就更是少之又少。今天为大家推荐一个go的gui库go-fltk。它是通过cgo调用了c++的fltk库,性能非常高...
- 旧电脑的首选系统:TinyCore!体积小+精简+速度极快,你敢安装吗
-
这几天老毛桃整理了几个微型Linux发行版,准备分享给大家。要知道可供我们日常使用的Linux发行版有很多,但其中的一些发行版经常会被大家忽视。其实这些微型Linux发行版是一种非常强大的创新:在一台...
- codeblocks和VS2019下的fltk使用中文
-
在fltk中用中文有点问题。英文是这样。中文就成这个样子了。我查了查资料,说用UTF-8编码就行了。edit->Fileencoding->UTF-8然后保存文件。看下下边的编码指示确...
- FLTK(Fast Light Toolkit)一个轻量级的跨平台Python GUI库
-
FLTK(FastLightToolkit)是一个轻量级的跨平台GUI库,特别适用于开发需要快速、高效且简单界面的应用程序。本文将介绍Python中的FLTK库,包括其特性、应用场景以及如何通过代...
- 中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux
-
IT之家1月29日消息,去年6月份,中科院大学教授、中科院计算所研究员包云岗,发布了开源高性能RISC-V处理器核心——香山。近日,包云岗在社交平台晒出图片,香山芯片已流片,回片后...
- Linux 5.13内核有望合并对苹果M1处理器支持的初步代码
-
预计Linux5.13将初步支持苹果SiliconM1处理器,不过完整的支持工作可能还需要几年时间才能完全完成。虽然Linux已经可以在苹果SiliconM1上运行,但这需要通过一系列的补丁才能...
- Ubuntu系统下COM口测试教程(ubuntu port)
-
1、在待测试的板上下载minicom,下载minicom有两种方法:方法一:在Ubuntu软件中心里面搜索下载方法二:按“Ctrl+Alt+T”打开终端,打开终端后输入“sudosu”回车;在下...
- 湖北嵌入式软件工程师培训怎么选,让自己脱颖而出
-
很多年轻人毕业即失业、面试总是不如意、薪酬不满意、在家躺平。“就业难”该如何应对,参加培训是否能改变自己的职业走向,在湖北,有哪些嵌入式软件工程师培训怎么选值得推荐?粤嵌科技在嵌入式培训领域有十几年经...
- 新阁上位机开发---10年工程师的Modbus总结
-
前言我算了一下,今年是我跟Modbus相识的第10年,从最开始的简单应用到协议了解,从协议开发到协议讲解,这个陪伴了10年的协议,它一直没变,变的只是我对它的理解和认识。我一直认为Modbus协议的存...
- 创建你的第一个可运行的嵌入式Linux系统-5
-
@ZHangZMo在MicrochipBuildroot中配置QT5选择Graphic配置文件增加QT5的配置修改根文件系统支持QT5修改output/target/etc/profile配置文件...
- 如何在Linux下给zigbee CC2530实现上位机
-
0、前言网友提问如下:粉丝提问项目框架汇总下这个网友的问题,其实就是实现一个网关程序,内容分为几块:下位机,通过串口与上位机相连;下位机要能够接收上位机下发的命令,并解析这些命令;下位机能够根据这些命...
- Python实现串口助手 - 03串口功能实现
-
串口调试助手是最核心的当然是串口数据收发与显示的功能,pzh-py-com借助的是pySerial库实现串口收发功能,今天痞子衡为大家介绍pySerial是如何在pzh-py-com发挥功能的。一、...
- 为什么选择UART(串口)作为调试接口,而不是I2C、SPI等其他接口
-
UART(通用异步收发传输器)通常被选作调试接口有以下几个原因:简单性:协议简单:UART的协议非常简单,只需设置波特率、数据位、停止位和校验位就可以进行通信。相比之下,I2C和SPI需要处理更多的通...
- 同一个类,不同代码,Qt 串口类QSerialPort 与各种外设通讯处理
-
串口通讯在各种外设通讯中是常见接口,因为各种嵌入式CPU中串口标配,工业控制中如果不够还通过各种串口芯片进行扩展。比如spi接口的W25Q128FV.对于软件而言,因为驱动接口固定,软件也相对好写,因...
- 嵌入式linux为什么可以通过PC上的串口去执行命令?
-
1、uboot(负责初始化基本硬bai件,如串口,网卡,usb口等,然du后引导系统zhi运行)2、linux系统(真正的操作系统)3、你的应用程序(基于操作系统的软件应用)当你开发板上电时,u...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- go语言也可以做gui,go-fltk让你做出c++级别的桌面应用
- 旧电脑的首选系统:TinyCore!体积小+精简+速度极快,你敢安装吗
- codeblocks和VS2019下的fltk使用中文
- FLTK(Fast Light Toolkit)一个轻量级的跨平台Python GUI库
- 中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux
- Linux 5.13内核有望合并对苹果M1处理器支持的初步代码
- Ubuntu系统下COM口测试教程(ubuntu port)
- 湖北嵌入式软件工程师培训怎么选,让自己脱颖而出
- 新阁上位机开发---10年工程师的Modbus总结
- 创建你的第一个可运行的嵌入式Linux系统-5
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)