奇迹小说
C++服务器开发精髓

C++服务器开发精髓

作者: 张远龙 著

25.74万72人 正在读

已完结现代当代当代文学
作品简介

本书从操作系统原理角度讲解进行C++服务器开发所需掌握的技术栈。全书总计9章,第1~2章讲解C++ 11/14/17新标准中的常用特性、新增类库,以及C++开发者必须熟练掌握的开发调试工具链;第3~6章详细讲解C++服务器开发中的多线程编程技术、网络编程重难点知识、网络故障调试与排查常用工具,以及通信协议的设计思路、技巧;第7~8章详细讲解一个带网络通信组件的高性能服务的基本设计思路和注意事项;第9章进一步补充服务相关的常用模块设计思路和方法。本书秉承的思想是,通过掌握技术原理,可以轻松制造“轮子”,灵活设计出优雅、鲁棒的服务,并快速学习新技术。 无论是对于C/C++开发者、计算机专业的学生,还是对于想了解操作系统原理的读者,本书都极具参考价值。

目录 (300章)
倒序
正文
第1章C++必知必会1.1C++RAII惯用法1.1.1版本1:最初的写法1.1.2版本2:使用goto语句1.1.3版本3:使用do...while(0)循环1.1.4版本4:使用RAII惯用法1.1.5小结1.2pimpl惯用法1.3C++11/14/17新增的实用特性1.4统一的类成员初始化语法与std::initializer_list<T>1.5C++17注解标签(attributes)1.5.1C++98/03的enumeration和C++11的enumerator1.5.2C++17的注解标签1.6final、override关键字和=default、=delete语法1.6.1final关键字1.6.2override关键字1.6.3=default语法1.6.4=delete语法1.7auto关键字的用法1.8Range-based循环语法1.8.1自定义对象如何支持Range-based循环语法1.8.2for-each循环的实现原理1.9C++17结构化绑定1.10stl容器新增的实用方法1.10.1原位构造与容器的emplace系列函数1.10.2std::map的try_emplace方法与insert_or_assign方法1.11stl中的智能指针类详解1.11.1C++98/03的尝试——std::auto_ptr1.11.2std::unique_ptr1.11.3std::shared_ptr1.11.4std::enable_shared_from_this1.11.5std::weak_ptr1.11.6智能指针对象的大小1.11.7使用智能指针时的注意事项第2章C++后端开发必备的工具和调试知识2.1SSH工具与FTP工具2.1.1Xshell2.1.2FTP2.2makefile与CMake2.3使用VisualStudio管理和阅读开源项目代码2.4gdb调试2.4.2启动gdb调试的方法2.5gdb常用命令详解——利用gdb调试Redis2.5.1gdb常用调试命令概览和说明2.5.2用gdb调试Redis前的准备工作2.5.3run命令2.5.4continue命令2.5.5break命令2.5.6tbreak命令2.5.7backtrace与frame命令2.5.8infobreak、enable、disable、delete命令2.5.9list命令2.5.10print与ptype命令2.5.11info与thread命令2.5.12next、step、until、finish、return、jump命令2.5.13disassemble命令2.5.14setargs与showargs命令2.5.15watch命令2.5.16display命令2.5.17dir命令2.6.2在调试时控制线程切换2.8gdb实用调试技巧2.8.1将print输出的字符串或字符数组完整显示2.8.3函数明明存在,添加断点时却无效2.8.4调试中的断点2.8.5自定义gdb调试命令2.9gdbtui——gdb图形化界面2.9.1开启gdbTUI模式2.9.2gdbTUI模式下的4个窗口2.9.3解决tui窗口不自动更新内容的问题2.9.4窗口焦点切换2.10gdb的升级版——cgdb2.11使用VisualGDB调试第3章多线程编程与资源同步3.1线程的基本概念及常见问题3.1.1主线程退出,支线程也将退出吗3.1.2某个线程崩溃,会导致进程退出吗3.2线程的基本操作3.2.1创建线程3.2.2获取线程ID3.2.3等待线程结束3.3惯用法:将C++类对象实例指针作为线程函数的参数3.4整型变量的原子操作3.4.1为什么给整型变量赋值不是原子操作3.4.2Windows平台上对整型变量的原子操作3.4.3C++11对整型变量原子操作的支持3.5Linux线程同步对象3.5.1Linux互斥体3.5.2Linux信号量3.5.3Linux条件变量3.5.4Linux读写锁3.6Windows线程同步对象3.6.1WaitForSingleObject与WaitForMultipleObjects函数3.6.2Windows临界区对象3.6.3WindowsEvent对象3.6.4WindowsMutex对象3.6.5WindowsSemaphore对象3.6.6Windows读写锁3.6.7Windows条件变量3.6.8在多进程之间共享线程同步对象3.7C++11/14/17线程同步对象3.7.1std::mutex系列3.7.2std::shared_mutex3.7.3std::condition_variable3.8如何确保创建的线程一定能运行3.9多线程使用锁经验总结3.9.1减少锁的使用次数3.9.2明确锁的范围3.9.3减少锁的使用粒度3.9.4避免死锁的一些建议3.9.5避免活锁的一些建议3.10线程局部存储3.10.1Windows的线程局部存储3.10.2Linux的线程局部存储3.10.3C++11的thread_local关键字3.11C库的非线程安全函数3.12线程池与队列系统的设计3.12.1线程池的设计原理3.12.2环形队列3.12.3消息中间件3.13纤程(Fiber)与协程(Routine)3.13.1纤程3.13.2协程第4章网络编程重难点解析4.1学习网络编程时应该掌握的socket函数4.1.1在Linux上查看socket函数的帮助信息4.1.2在Windows上查看socket函数的帮助信息4.2TCP网络通信的基本流程4.3设计跨平台网络通信库时的一些socket函数用法4.3.1socket数据类型4.3.2在Windows上调用socket函数4.3.3关闭socket函数4.3.4获取socket函数的错误码4.3.5套接字函数的返回值4.3.6select函数第1个参数的问题4.3.7错误码WSAEWOULDBLOCK和EWOULDBLOCK4.4bind函数重难点分析4.4.1对bind函数如何选择绑定地址4.4.2bind函数的端口号问题4.5select函数的用法和原理4.5.1Linux上的select函数4.5.2Windows上的select函数4.6socket的阻塞模式和非阻塞模式4.6.1如何将socket设置为非阻塞模式4.6.2send和recv函数在阻塞和非阻塞模式下的表现4.6.3非阻塞模式下send和recv函数的返回值总结4.6.4阻塞与非阻塞socket的各自适用场景4.7发送0字节数据的效果4.8connect函数在阻塞和非阻塞模式下的行为4.9连接时顺便接收第1组数据4.10如何获取当前socket对应的接收缓冲区中的可读数据量4.10.1分析4.10.2注意事项4.11LinuxEINTR错误码4.12LinuxSIGPIPE信号4.13Linuxpoll函数的用法4.14Linuxepoll模型4.14.1基本用法4.14.2epoll_wait与poll函数的区别4.14.3LT模式和ET模式4.14.4EPOLLONESHOT选项4.15高效的readv和writev函数4.16.3操作系统提供的字节转换函数汇总4.17域名解析API介绍第5章网络通信故障排查常用命令5.1ifconfig命令5.2ping命令5.3telnet命令5.4netstat命令5.5lsof命令5.6nc命令5.7curl命令5.8tcpdump命令第6章网络通信协议设计6.1理解TCP6.2如何解决粘包问题6.3解包与处理6.4从struct到TLV6.4.1协议的演化6.4.2协议的分类6.4.3协议设计工具6.5整型数值的压缩6.6设计通信协议时的注意事项6.6.1字节对齐6.6.2显式地指定整型字段的长度6.6.3涉及浮点数时要考虑精度问题6.6.4大小端问题6.6.5协议与自动升级功能6.7包分片6.8XML与JSON格式的协议6.9一个自定义协议示例6.10理解HTTP6.10.1HTTP格式介绍6.10.2GET与POST方法6.10.3HTTPchunk编码6.10.4HTTP客户端的编码实现6.10.5HTTP服务端的实现6.10.6HTTP与长连接6.10.7libcurl6.10.8Restful接口与JavaSpringMVC6.11SMTP、POP3与邮件客户端6.11.1邮件协议简介6.11.2SMTP6.11.3POP36.11.4邮件客户端6.12WebSocket协议6.12.1WebSocket协议的握手过程6.12.2WebSocket协议的格式6.12.3WebSocket协议的压缩格式6.12.4WebSocket协议装包与解包示例6.12.5解析握手协议第7章单个服务的基本结构7.1网络通信组件的效率问题7.1.1高效网络通信框架的设计原则7.1.2连接的被动关闭与主动关闭7.1.3长连接和短连接7.2原始的服务器结构7.3一个连接对应一个线程模型7.4Reactor模式7.5onethreadoneloop思想7.5.2线程的分工7.5.3唤醒机制的实现7.5.4handle_other_things方法的实现逻辑7.5.6onethreadoneloop的效率保障7.6收发数据的正确做法7.6.1如何收取数据7.6.2如何发送数据7.6.3不要多个线程同时利用一个socket收(发)数据7.7发送、接收缓冲区的设计要点7.7.1为什么需要发送缓冲区和接收缓冲区7.7.2如何设计发送缓冲区和接收缓冲区7.7.3服务端发送数据时对端一直不接收的问题7.8网络库的分层设计7.8.1网络库设计中的各个层7.8.2将Session进一步分层7.8.3连接信息与EventLoop/Thread的对应关系7.9后端服务中的定时器设计7.9.1最简单的定时器7.9.2定时器设计的基本思路7.9.3定时器逻辑的性能优化7.9.4对时间的缓存7.10处理业务数据时是否一定要单独开线程7.11非侵入式结构与侵入式结构7.11.1非侵入式结构7.11.2侵入式结构7.12带有网络通信模块的服务器的经典结构7.12.1为何要将listenfd设置成非阻塞模式7.12.2基于onethreadoneloop结构的经典服务器结构7.12.3服务器的性能瓶颈8.1调试Redis环境与准备8.1.1Redis源码编译与启动8.1.2通信示例与术语约定8.2探究redis-server端的网络通信模块8.2.1监听fd的初始化工作8.2.2接受客户端连接8.2.3epollfd的创建8.2.4监听fd与客户端fd是如何挂载到epollfd上的8.2.5readQueryFromClient函数8.2.6如何处理可写事件8.2.7Redis6.0多线程网络I/O(1)8.2.7Redis6.0多线程网络I/O(2)8.2.7Redis6.0多线程网络I/O(3)8.2.8Redis对客户端的管理8.2.9客户端断开流程8.2.10Redis中收发缓冲区的设计8.2.11定时器逻辑8.2.12钩子函数8.2.13redis-server端网络通信模块小结8.3探究redis-cli端的网络通信模型8.4Redis的通信协议格式8.4.1请求命令格式8.4.2应答命令格式8.4.3多命令和流水线8.4.4特殊的redis-cli与内联命令8.4.5Redis对协议数据的解析逻辑第9章服务器开发中的常用模块设计9.1断线自动重连的应用场景和逻辑设计9.2保活机制与心跳包9.2.1TCPkeepalive选项9.2.2应用层的心跳包机制设计9.2.3有代理的心跳包机制设计9.2.4带业务数据的心跳包9.2.5心跳包与流量9.2.6心跳包与调试9.2.7心跳包与日志9.3日志模块的设计9.3.1为什么需要日志9.3.2日志系统的技术实现(1)9.3.2日志系统的技术实现(2)9.3.3在C/C++中输出网络数据包日志9.3.4调试时的日志9.3.6根据类型将日志写入不同的文件中9.3.7集中式日志服务与分布式日志服务9.3.8从业务层面看在一条日志中应该包含什么内容9.3.9在日志中不要出现敏感信息9.3.10开发过程中的日志递进缩减策略9.4错误码系统的设计9.4.1错误码的作用9.4.2错误码系统设计实践9.5监控端口
精选推荐
领导力法则

领导力法则

[中国纺织出版社]

陆禹萌

已完结当代文学

销售心理学

销售心理学

[中国纺织出版社]

兰华

已完结当代文学

销售就是玩转情商

销售就是玩转情商

[中国纺织出版社]

王威

已完结当代文学

销售员情商实战训练

销售员情商实战训练

成功的销售需要高智商,更需要高情商。一个销售员的销售业绩,往往与他的情商成正比。本书从十个方面详细讲述了有效运用情商,提高销售业绩的方法和技巧。通过实际销售案例和销售心理学理论指导,以及实战点拨和情商拓展训练,帮助读者全方位、快速提高情商。故事性、多版块、碎片化的内容设置,有效降低读者阅读疲劳,提高阅读兴趣,不论是奔波在路上的销售小白,还是带领团队奋勇向前的销售经理,都能从中找到适合自己的销售软技巧。

刘军

已完结当代文学

让未来的你,感谢现在勇敢的自己

让未来的你,感谢现在勇敢的自己

[中国纺织出版社]

王介威

已完结当代文学

行为心理学:华生的实用心理学课

行为心理学:华生的实用心理学课

[中国纺织出版社]

(美)约翰·华生著.倪彩

已完结当代文学

行为心理学入门(完全图解版)

行为心理学入门(完全图解版)

行为心理学入门(完全图解版)是以作者多来年的心理辅导和咨询数据为素材,对现实生活中的行为心理学应用进行了形象、深入、全面的论述和解读。本书与日本心理学图解书形式相同,浅显易读,有趣又益。

武莉

已完结当代文学

自卑与超越

自卑与超越

《自卑与(全译插图典藏版)》是个体心理学研究领域的著作,也是人本主义心理学先驱阿尔弗雷德·阿德勒的很好著作。阿德勒的学说以“自卑感”与“创造性自我”为中心,并强调“社会意识”。全书立足个人心理学的观点,从教育、家庭、婚姻、伦理、社交等多个领域,以大量的实例为论述基础,阐明了人生意义的真谛,帮助人们克服自卑、不断超自己,正确对待职业,正确理解社会与性。本书直接促进了亲子教育、人格培养、婚姻与爱情、职业生涯、家庭建设、人际关系等诸多领域的长足发展,成为人们了解心理学的经典读物。

(奥)阿尔弗雷德·阿德勒

已完结当代文学

自制力:道理我都懂,为什么就是过不好人生

自制力:道理我都懂,为什么就是过不好人生

[中国纺织出版社]

邱开杰

已完结当代文学