作者:拱白菜的阿秀
来源:牛客网
一个付费专栏
如果你自学能力比较强,能够按照安心啃下来《TCPIP网络编程》和《Linux高性能服务端编程》这两本书也可以。
如果不可以,或者还是习惯通过视频的方式学习,那你可以试试一个牛客网的Linux C/C++服务器的开发专栏,不过是付费的。
网上免费资源有很多,但免费的资源质量良莠不齐,最好看一些经典的或公认的比较好的视频。
相对而言付费的资源质量有保证一些,我以前在牛客网进行求职分享的时候,看过他们的这个Linux C/C++服务器的开发专栏,看了其中的课表和主要内容,该讲的内容基本都涉及到了,基本上把《TCPIP网络编程》和《Linux高性能服务端编程》这两本书汇总最主要的一些知识点都覆盖到了,质量还不错。
最主要的是有人带着你学,比自己蒙头苦学好多了。
地址:https://www.nowcoder.com/courses/cover/live/504?coupon=AcNi2gn
当然了,如果你想要理解
先看牛客网视频教学,然后一边做笔记
https://www.nowcoder.com/study/live/504
然后在快速看一下书:
一:
学习C/C++ Linux相关的网络编程,必看的两本书分别是《TCP/IP 网络编程》和《Linux高性能服务端编程》。
前者是本很好的书,原因就是手把手教你写代码,这是真的手把手教你写代码。。唯一不好的点就是书中的很
多知识讲的太浅了,很多功能和原理都只是一笔带过,远远不如《Linux高性能服务端编程》讲的深。
看完《TCPIP网络编程》后,你应该去看有一下游双老师的《Linux高性能服务端编程》。
这本书讲的相当不错,是每一个从事服务端开发的人必备的一本书,《TCPIP网络编程》那本书告诉了你How,这本书则告诉你Why。
还有一本选看的书,是北师大陈硕老师的《Mudo:Linux 多线程服务端编程》。
这本书好,但是有点高深了,而且工业界用Mudo的也不是很多,如果不是从事服务端研发的同学可以不看这本书或者后期有需要了再来看这本书。
陈硕老师以前也在博览网录制了一个跟《Mudo:Linux 多线程服务端编程》配套的视频
二:
C++ 后台开发基本是离不开网络编程的,其实甚至整个后台开发也可以看做是在做网络编程。
只不过别人的框架帮我们做了协议解析、网络数据传输、解封包这些底层操作。
比如 SpringBoot 这种保姆级框架,基本上属于将一个框架能干的事都干完了,以至于我们开发业务只需要定义接收和返回包的数据格式,然后做逻辑处理就完了。
像序列化、解封包、IO 处理这种网络编程必备的脏活业务开发根本不会接触到。
但是网络编程技能还是很重要的,特别是对于 Linux C++ 开发来说。
Linux 下网络编程核心的包括系统编程和网络 IO 两个部分:
- 进程间通信方式: 信号量、管道、共享内存、socket 等
- 多线程编程:互斥锁、条件变量、读写锁、线程池等
- 五大 IO 模型:同步、异步、阻塞、非阻塞、信号驱动
- 高性能 IO 两种模式:Reactor 和 Proactor( 但是 Linux 下由于缺少异步 IO 支持,基本没有 Proactor
-
IO 复用机制:epoll、select、poll(破解 C10K 问题的利器)
推荐的书:
- 《Unix网络编程》
-
《Unix环境高级编程》
这两本是砖头书,虽然是网络编程和 Unix 系统编程方面的无出其右的圣经,但主要用途还是垫显示器(逃, 个人觉得这种书不是面向读者的,具体原因和如何阅读这种书在后文介绍。
-
《Linux高性能服务器编程》
我强烈推荐,这本书前半部分基本是在重复计网基础知识,但是后面几章关于高性能服务器程序框架、高性能IO、IO复用、定时器、多线程编程、线程池和进程池还是讲得非常全面到位的,值得一看,看完基本上对于整个网络编程就有了框架。
-
《Linux多线程服务器端编程》
这本书同样强烈推荐,这是陈硕大佬写的书,说实话第一部分:C++ 多线程系统编程都直接把我看蒙了,没有想到 C++ 里要做到线程安全这么难,第一章我看了两三遍才看懂吧。。。 这是难得的讲解 C++ 多线程编程的书。
并且在书中,陈硕大佬用了一章讲解了 Muduo 网络库设计与实现,Muduo 比较适合学完基础的网络编程后继续进阶学习如何设计和写一个网络库,是一个高质量的 Reactor 网络库,采用 one loop per thread + thread pool 实现,代码比较简洁,书和源码搭配着看作为学习网络编程方面来说是非常不错。
学完网络编程就可以写点小项目练手了,这里列举几个项目:
- HTTP 服务器,这个似乎成了 Linux C/C++ 人手一个的项目了?
这里推荐两个做为参考:
https://github.com/imarvinle/WebServer: 这是我看完高性能服务器编程后写的
https://github.com/linyacool/WebServer :这是牛客 linya 大佬写的
不过 HTTP 服务器看着挺简单的,但是可以扩展写的地方还是挺多的,比如可以加入代理功能,这部分我在留学生 lab 中写过,但是没有集成到这个里面来,可以加入日志库,可以添加 CGI 支持等等。 - 网络库
这个也算是造轮子了, 可以就采用 one loop per thread + thread pool 这种模式,先去看懂 Muduo 源码,然后自己再写一个类似的,这个过程就算是抄,你也可以学到不少东西的,学编程不就是这样先看,再模仿、修改,然后创新吗? - RPC
写一个 PRC 你需要考虑到序列化、网络传输、服务发现等,比较有名的有 grpc、brpc,这两个网上文档都比较完善,可以学习一下实现原理。
这里还有一个简单版本的:https://github.com/guangqianpeng/jrpc - 类似QQ的网络聊天室
简单版的就可以直接在局域网内实现群聊、单聊等。
更进一步可以考虑一下如何不通过服务器中转消息实现 P2P 聊天,类似 QQ,这里会涉及到 UDP 打洞、NAT 转换等知识,还是很有意思的,我大二用 Java 搞过。
作者:程序员小北
标签:编程,网络,C++,Linux,思路,多线程,服务端 From: https://www.cnblogs.com/libxing/p/16642621.html