首页 > 系统相关 >Linux网络编程 学习思路

Linux网络编程 学习思路

时间:2022-08-31 12:11:09浏览次数:104  
标签:编程 网络 C++ Linux 思路 多线程 服务端

作者:拱白菜的阿秀

链接:https://www.nowcoder.com/discuss/809908?type=all&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_all_nctrack

来源:牛客网

   

一个付费专栏

如果你自学能力比较强,能够按照安心啃下来《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 多线程服务端编程》配套的视频

链接:https://www.nowcoder.com/discuss/809908?type=all&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_all_nctrack

   

   

二:

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 搞过。

作者:程序员小北

链接:https://www.nowcoder.com/discuss/813838?type=all&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_all_nctrack

   

   

   

标签:编程,网络,C++,Linux,思路,多线程,服务端
From: https://www.cnblogs.com/libxing/p/16642621.html

相关文章

  • linux命令
    整机管理top/uptimetop-14:55:19up1day,15min,1user,loadaverage:2.70,2.38,1.86任务:278total,3running,186sleeping,0stopped,0zo......
  • 编程小白也能快速掌握的ArkUI JS组件开发
    Playground自上线以来,得到了广大开发者的一致好评。特别是它的ArkUIJS组件在线预览功能,不但可以从中学习基础组件的使用,还可以在线体验一键预览的编译效果。通过Playgr......
  • Petalinux 常用命令
    基本设置#设置bash为默认sh#打开终端#输入命令,Configuringdash选择“No”,回车确认sudodpkg-reconfiguredash#加载petalinux环境source/opt/pkg/petalinu......
  • Linux之awk条件语句和循环语句(五)
    1.条件语句1.1IF语句IF条件语句语法格式如下:if(condition)action或者使用花括号:if(condition){action-1action-1..action-n......
  • 在 Linux 中使用 Find 命令搜索文件的 10 个实用示例
    在Linux中使用Find命令搜索文件的10个实用示例GNUFind命令示例在Linux中查找文件Photoby加布里埃尔·海因策on不飞溅介绍作为Linux用户或管理员,您......
  • linux查看日志文件内容命令tail、cat、tac、head、echo
    linux查看日志文件内容命令tail、cat、tac、head、echo-大自然的流风-博客园 https://www.cnblogs.com/zdz8207/p/linux-log-tail-cat-tac.htmllinux查看日志文件内......
  • linux scp从一台机器复制文件到另一台linux机器上去
    本机IP:192.168.138.150要传送的IP地址为:192.168.138.151任务:拷贝/etc/ha.d/ldirectord.cf文件到151机器上,地址为:/etc/ha.d在本机上操作,使用命令scp:以下操作是从本地拷......
  • 为什么我们强迫你学习多种编程语言
    为什么我们强迫你学习多种编程语言我一直在建造引导程序作为过去几年的一个副项目,最近有很多新生问同样的问题:“为什么你的后端课程要求我学习不止一种编程语言?”......
  • LINUX系统下DM企业版的使用
    一、DM8企业版安装图形化安装设置图形化:(第一次开机登录,需要执行xhost+)[root@localhost~]#xhost+[root@localhost~]#su-dmdba上一次登录:三8月2411:25:3......
  • QT网络编程【二】【Socket】
    1.QT中添加socket库的相关操作2.正常c++11VS2019使用socket库的操作3.winsock2与sys/socket.h的区别?4.WinSock2的基本操作?5.socket的创建参数的说明[]:http://t......