图书推荐|高性能Linux网络编程核心技术揭秘

实战基于libevent 的FTP服务器、基于epoll的高并发聊天服务器、基于DPDK的应用案例

图片

本书简介

本书详解高性能Linux网络编程的核心技术及DPDK框架,剖析Nginx高性能服务器架构,实战基于libevent 的FTP服务器、基于epoll的高并发聊天服务器、基于DPDK的应用案例、基于P2P架构的高性能游戏服务器。

本书内容

详解高性能Linux网络编程核心技术及DPDK框架。

  • 剖析Nginx高性能服务器架构。

  •  实战基于libevent 的FTP服务器、基于epoll的高并发聊天服务器、基于DPDK的应用案例、基于P2P架构的高性能游戏服务器。可做课程设计和毕业论文素材。可借鉴用来设计商用产品。

  • 配套示例源码、作者QQ答疑。

本书读者

 本书既适合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网络编程核心技术揭秘》,获出版社和作者授权发布。

高性能Linux网络编程核心技术揭秘——京东

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/281826.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker网桥、DockerFile自定义镜像、DockerCompose工具(二)

这里写目录标题 1、网桥1.1、网络相关操作1.1.1、创建网络1.1.2、列出网络1.1.3、加入网络1.1.4、查看网络详情1.1.5、删除网络 2、Dockerfile自定义镜像2.1、镜像结构2.2、Dockerfile语法2.2.1、概述2.2.2、快速入门2.2.1、FROM2.2.2、CMD2.2.3、ENV2.2.4、WORKDIR2.2.5、run2…

关于汽车中网改装需要报备吗?(第二天)

车联网改造需要申报吗? 今天2022年10月20日,小编就给大家介绍一下车联网改装是否需要申报的相关知识。 让我们来看看。 汽车格栅改装无需申报。 这种年检可以直接通过。 您不必担心,因为汽车格栅对于实车的外观来说并不陌生,因此…

设计编程网站集:生活部分:饮食+农业,植物(暂记)

这里写目录标题 植物相关综合教程**大型植物:****高大乔木(Trees):** 具有坚硬的木质茎,通常高度超过6米。例如,橡树、松树、榉树等。松树梧桐 **灌木(Shrubs):** 比乔木…

flutter使用记录(vscode开发)

1.Gradle-7.6.3-all.zip 下载失败 编辑项目中的 gradle/wrapper/gradle-wrapper.properties 文件,并设置 distributionUrl 的值为可靠的镜像站点,如下所示: distributionUrlhttps\://services.gradle.org/distributions/gradle-7.6.3-all.z…

HarmonyOS ArkTS 基础组件

目录 一、常用组件 二、文本显示(Text/Span) 2.1 创建文本 2.2 属性 2.3 添加子组件(Span) 2.4 添加事件 三、按钮(Button) 3.1 创建按钮 3.2 设置按钮类型 3.3 悬浮按钮 四、文本输入(TextInput/TextArea)…

个人网站制作 Part 14 添加网站分析工具 | Web开发项目

文章目录 👩‍💻 基础Web开发练手项目系列:个人网站制作🚀 添加网站分析工具🔨使用Google Analytics🔧步骤 1: 注册Google Analytics账户🔧步骤 2: 获取跟踪代码 🔨使用Vue.js&#…

分库分表场景下多维查询解决方案(用户+商户)

在采用分库分表设计时,通过一个PartitionKey根据散列策略将数据分散到不同的库表中,从而有效降低海量数据下C端访问数据库的压力。这种方式可以缓解单一数据库的压力,提升了吞吐量,但同时也带来了新的问题。对于B端商户而言&#…

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

B004-springcloud alibaba 服务容错 Sentinel

目录 高并发带来的问题服务雪崩效应常见容错方案常见的容错思路隔离超时限流熔断降级 常见的容错组件 Sentinel入门什么是Sentinel微服务项目集成Sentinel核心库安装Sentinel控制台实现一个接口的限流 Sentinel的概念和功能基本概念重要功能 Sentinel规则流控规则三种流控模式三…

verilog设计-CDC:单bit脉冲快时钟域到慢时钟域

一、前言 当单bit信号由快时钟域传递给慢时钟域时,快时钟域的异步信号最小可为快时钟信号的一个时钟周期脉冲,快时钟域的单时钟周期脉冲长度小于慢时钟域的时钟周期,很有可能该脉冲信号在慢时钟域的两个时钟上升沿之间,导致该脉冲…

Flask中的Blueprints:模块化和组织大型Web应用【第142篇—Web应用】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask中的Blueprints:模块化和组织大型Web应用 在构建大型Web应用时&#xff0…

数据机构-2(顺序表)

线性表 概念 顺序表 示例&#xff1a;创建一个存储学生信息的顺序表 表头&#xff08;Tlen总长度&#xff0c; Clen当前长度&#xff09; 函数 #include <seqlist.c> #include <stdio.h> #include <stdlib.h> #include "seqlist.h" #include &…

【论文精读】OTA: Optimal Transport Assignment for Object Detection(物体探测的最优传输分配)

OTA最优传输 &#x1f680;&#x1f680;&#x1f680;摘要一、1️⃣ Introduction---介绍二、2️⃣Related Work---相关工作2.1 &#x1f393; Fixed Label Assignment--静态标签分配2.2 ✨Dynamic Label Assignment--动态标签分配 三、3️⃣Method---论文方法3.1 &#x1f39…

Linux - 应用层HTTPS、传输层TCP/IP模型中典型协议解析

目录 应用层&#xff1a;自定制协议实例 HTTP协议首行头部空行正文http服务器的搭建 HTTPS协议 传输层UDP协议TCP协议 应用层&#xff1a; 应用层负责应用程序之间的沟通—程序员自己定义数据的组织格式 应用层协议&#xff1a;如何将多个数据对象组织成为一个二进制数据串进行…

【探讨】基于卷积神经网络深度学习模型的光场显微三维粒子空间分布重建

光场显微粒子图像测速技术通过单光场相机即可实现微尺度三维速度场的测量&#xff0c;但单光场相机角度信息有限&#xff0c;导致粒子重建的轴向分辨率低、重建速度慢。基于此&#xff0c;提出一种基于卷积神经网络深度学习模型的光场显微粒子三维空间分布重建方法&#xff0c;…

说说你对webpack的理解?解决了什么问题?

文章目录 一、背景二、问题三、是什么参考文献 一、背景 Webpack 最初的目标是实现前端项目的模块化&#xff0c;旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候&#xff0c;我们会通过文件划分的形式实现模块化&#xff0c;也就是将每个功能及其相关状态数据各…

浅谈如何自我实现一个消息队列服务器(2)——实现 broker server 服务器

文章目录 一、实现 broker server 服务器1.1 创建一个SpringBoot项目1.2 创建Java类 二、硬盘持久化存储 broker server 里的数据2.1 数据库存储2.1.1 浅谈SQLiteMyBatis 2.1.2 如何使用SQLite 2.2 使用DataBaseManager类封装数据库操作2.3 文件存储消息2.3.1 存储消息时&#…

Visual Studio 2022进行文件差异比较

前言 Visual Studio 2022在版本17.7.4中发布在解决方案资源管理器中比较文件的功能&#xff0c;通过使用此功能&#xff0c;可以轻松地查看两个文件之间的差异&#xff0c;包括添加、删除和修改的代码行。可以逐行查看差异&#xff0c;并根据需要手动调整和编辑文件内容以进行…

100个openharmony开源demo:1.日历

准备用开发者手机写100个开源的demo不知道能不能实现&#xff0c;日拱一卒&#xff0c;期待蜕变。 第一个demo&#xff1a;日历&#xff0c;借鉴了网上的日历算法&#xff0c;自己用arkts写了界面和点击事件&#xff0c;各位可根据此demo写自己的日历选择器等组件。 1.目录结…

【Godot 3.5组件】简单血条组件HealthBar

说明 本文原文写自2022年&#xff0c;内容基于Godot3.5。是本人早期进行Godot组件化和自定义节点探索时的产物&#xff0c;当时的代码和思想可能不太成熟&#xff0c;但贴出来&#xff0c;供需要学习组件化基础思路的同学食用。 概述 血条作为一个非常基础和常见的组件&…