陈硕《网络编程实战》

84 课程总结 【草稿】

站在巨人的肩膀之上。

按照录像整理,版权归陈硕大神。

我们这门课程呢,今天就是最后一讲,已经讲完了。

那我们再做一点小结,整理一下这个思路:

一个是网络编程易学难精,

我们回顾一下网络编程需要用哪些函数? 我数了一下,差不多刚好十个。

TCP的客户端,你需要三个函数:socket,先建立一个socket,然后connect连上,close关上三个。

服务端,再增加Bind、Listen、Accept三个,这就六个了。

所以通过这六个函数,客户端和服务端连接就已经建立好了。然后读写函数有三个,read、write、shutdown,这就九个。最后能加一个IO多路复用,就是poll 的 epoll,不多不少,刚好十个函数。

这个如果你要学一遍的,我估计一个周末,找一个教程来把代码打一遍,然后在一台机器上客户端服务端起起来,连上收发点数据,这个你就算是学过网络编程了,但很难精通掌握它。我也不敢说精通,我是熟悉某一些场景的正确写法,

那我们怎么样能够掌握上来,就是,看一些好的适应性强的例子,这个也是我们这门课程的主要的、出发点,因为网络程序很多,你去读这样的代码,动不动几万行,它其实网络相关的部分可能就几百行一两千行,剩下的是他的业务逻辑,所以这样的做的话,你这个精力就比较分散。

我们就说这门课,就是把这个网络部分的代码给它凸显出来,那业务逻辑比较简单,也不是完全没有,完全没有就没有意思了,那你能够既掌握一些数据处理的方法,更重要的是掌握正确的网络编程的这个这些惯用手法或者叫parteng?

我精选了大概十一、二个例子在这门课程里面讲,讲完之后呢,希望大家觉得有所收获物有所值,然后呢,网络编程是手段,而不是目的,不是我一定要用网络编程,或一定要我要写Socket,我才是网络编程,你的目的是处理你的数据,或者做一个什么什么服务器或者什么什么服务,比如说我是做广告的基础架构,那我这里边,因为这个请求是网络发过来的,所以我必须要懂一点网络编程,不然就没法处理这东西,那这个只是说我这个是我的工具,是我的这个手段不是我这个目的,网络编程从来也不是目的,大多数人不需要去跟Sockets API 打交道,这也是我们这么课程,只有在第一部分讲了几个 Sockets API 之后,我们就全部用网络库了,那这个是你,如果你这个代码的业务逻辑里面经常要混杂着什么read、write 啊,通常就是你这个抽象,不对,就是没有没有正确抽象,你这里面这个数据流,你还是你,应该是收发消息,作为一个纯抽象,或者在高层一点的?????PC的调用,作为抽象,而不是说你在动不动想了啊,我这里要去epoll wait,一下,看看有没有数据,到了,通常就是你这个代码写的就比较比较杂,也很难测试,
但是,尽管他们不需要懂这个Sockets API,但他们需要理解网络编程,特别是我们最常用是 TCP 的这么一个啊,这个协议这个TCP到底给了你什么东西,你要正确理解,TCP的连接,建立比较简单,连接,断开比较复杂,这可能跟一般人想法不一样啊,他创建一个计算机很简单,建立好之后你怎么合适的断开了,这样我们在前面的好像第四讲,还是第五讲是仔细的讲过的。

我在CSDN上阅读量最高的这篇文章就是《谈一谈网络编程学习经验》,这篇文章深入了我的那本书,录入了那本书的附录A,这个例子,这个附录试读的东西都可以在我这个个人主页的可以下载,有机会,大家可以读一下,然后呢,这篇文章里面讲的CSP??的协议架我也把他复活了,这样的话,但是我估计没有机会去更新这篇文章,你这份上现在是拷贝的,到处都是我更新了,也没没有太大用处,这个是因为文章讲的是比较底层的机顶盒收费???,CPU打交道的网络编程大赛,里面提了一些别的观点,我们觉得可以值得一读,也算是我那个让大概是,四五年前写的,也算是有一点传播很广、阅读量很大的文章,这就是我们课程的最后一节啊,全部讲完了,谢谢大家,多谢惠顾。

我们这里有一个链接,打开看一下,在知乎上比较活跃,他说,《陈硕的网络编程实践课程怎么样?》,有三十个回答,我希望大家看完这门课程以后呢,有机会有时间或者你有知乎账号,可以在这个问题下面给一个好评,这样也是我讲这么课程的一个动力,有很多人如果能有很多人从这里面受益,那我觉得我这个课程讲的就比较值。

因为啊,这门课程前面也讲了,计划中是应该半年就能讲完,但实际上加个两年,原因之一呢,我们这里可以跟大家多说几句,卡在了一个我们那个扑克赛?就是烧开纸是A的?代理服务器的一张为什么会卡在那里呢,我们可以看一下,muduo代码的更新,我们可以看那个,那个是我大概是15年八月份的时候,讲到了第七讲,然后那个第八讲是,这个 Socks 代理他用到的这个功能的代码里,一直没有实现,实现它并不难,但是一直没有人提出来实现它,所以说呢,就是啊,其实说明这个功能可能用的人不是很多,然后我就没有做,卡在这里。

一直到呢,到了2015年的十一月份,这功能,有人提了一个pull request,在TcpConnection增加了stop/startRead 这么一个功能,这个函数命名呢,不是很符合应聘??语法,这个这位是叫,Jako 这位网友提了这么一个 pull request,他实现了这个功能,然后呢,这是15年11月11号双十一的时候,好像是,这个有一个时差的问题,那么就说明这个,你看看他这个功能,它只是加了一个Reading,然后说如果startReading,他把enableReading和stopReading就调到disableReading,两个功能给调用起来,做好了。

就说明这个stopReading在从15年11月11号开始,muduo才有这个功能,其实我一直想加这个代码,是我们可以看啊,怎么可以看这个Channel.h,稍微运行一点时间,我们看他的,这个disableReading,这个功能,在14年9月19号,就已经加上去,这个在这个代码,我看他就干了,这也不是我一开始我们可以看这个事,情况是怎么回事,他是啊,因为是他做那个Redis一个集成,这位同学叫谢俊龙Junlong Xie,他在实现这个功能的时候呢,往这个Channel.h,我们可以看这个,加了一个功能,它把这一行代码的注释给去掉了。

我这个代码原来是我写的,我们可以看啊,你可以啊,看看这个版本之前的那个代码是怎么写的啊,好像不能这么写啊,不好意思,但这个版本之前是我写的,这个我应该是这么写的,我们可以看这个是我一开始那个版本,2011年就已经有这个有这么一行,只不过他是注释掉的,因为我觉得从完整性的角度上看应该有它,但是呢,这个功能一直没有人用,所以我就没有写,就把它注释起来,就是说如果你需要这个功能,你就可以把它反注释掉。

然后呢,我们可以看,在2014年的9月19号的时候呢,有人用到这个功能,就把这个,Channel.h里面这个disableReading就给打开了,就说明这个功能,就是我们非阻塞IO的时候,我一开始写的时候认为是你是一定要读的,但是有些时候跟第三方库集成的时候,还有一个得是他需要的是一个功能,是我好了,我读的差不多,我不想读了你,我再想读的时候,我在告诉你我需要读,所以这个disableReading,从14年打开,但是呢,我们自己的muduo的那个贴贴标签了,一直没有没有那个没有使用这个disableReading,因为这个功能也是比较少见,就是你读的数据,你就是只有在做pokse,所以只有在代理的时候,你才说我发数据来不及,所以我这个读数据,我把它停掉,我们就可以看,所以说到了15年,十一月份这个功能才有人需要,然后他再把它实现了。

我觉得这是开源软件的一个好处呢,你需要这个功能才实现,如果说我不需要,我就不用实现了,不能假定说别人需要这功能,我把所有功能做在那,这就是某些别的网络库早期的网络库会犯下的错误,他就把功能做的特别全,你们总会用到的,然后几年没有人用。

所以我做的是看来这是我留在这里,你需要的时候你可以实现,实现了石先生你就调用disableReading,那就是disableReading,这个Channel.h的魅力,start的时候你就enable,就这么简单,你这个功能实现以后呢,我们这个pokse?那一章才能够实现这个高低水位回调的时候,在高水位回调的时候,在发送的那个连接上的高水回调的时候把那个接收连接,的reading给他停掉,这个,所以就是说,让我们能够继续的把,才把这个功能正确的实现出来,你这个卡在了以后,后面的就顺延了一部分时间啊,我需要那好处,那就是2016年的这些变化呢,包括我后面讲的那个第七层还是第四层的问题的时候,谷歌那边paper我可以引用了,他在2016发表了,如果我15年把这课讲完,这个paper我就没办法引用第四层和第七层的这个问题,我就不好讲,

现在谷歌的paper公开发了,那我们就可以引用这个公开发表的内容,这样的话,你说等一等啊不是坏事,然后回到这个课程上讲了我见过。

我还想说一点的是我的个人信箱是这个giantchen@gmail.com,如果你有什么疑问的话呢,我建议是你给我写信,或者你在知乎上提问。

写信呢,我得到回答的是,我觉得比较好,网上提问的有一种,有一个不好的情况,就是你提一个问题,我给你回答了,然后有另外一个人,比方说路人甲他过来,他对你提的问题不满意,或者他看不明白或者看不明白我的回答,他到下面留言,然后很容易歪楼,那这种情况下,我一般是不回复的。

但是会有很多人就有不止一个人在下面留言就会来回的就争论起来,这个主题就带歪了,所以我一般在网上讨论技术问题呀,比较克制,我一般不在网上讨论,据说因为是说也说不清楚,有很多时候就觉得很一种无力感,你说了好像说明白了,但是人家别人就是这是不明白啊,其实我觉得Email是一个比较好的通信方式,然后我不用即时聊天工具,所以不要问我QQ号微信号是多少,你有技术问题,你就直接Email,或者你或者你觉得代码,我觉得,目录代码的话,你看不懂,代码,可以在一个那个知乎上提,如果这样的话,我回答了,以后别人可能也有帮助。

但是还有一个就是看不懂代码,不是muduo的issue,所以不要往muduo很多issue里边说,“我这套代码看不懂,我给你提个issue。”

我这种情况下一般会直接关掉,因为issue是说muduo有问题,那不是说你有问题啊,这是我对这个issue的理解,这不是一个讨论版。

话说了这么多,还是再次感谢大家啊,希望有机会我们在别的课程里面能够相见,但这个没有任何计划,拜拜。

陈硕《网络编程实战》 84 课程总结 【草稿】相关推荐

  1. 陈硕网络编程实战视频教程目录

    http://chenshuo.com/practical-network-programming/ 视频:https://www.bilibili.com/video/BV1sE41137zG?fr ...

  2. 陈硕《网络编程实战》03 课程内容大纲【稿】

    陈硕<网络编程实战> 03 课程内容大纲[稿] 站在巨人的肩膀之上. 按照录像整理,部分专有名词不太肯定,版权归陈硕大神. 我们对TCP的基本性能有了一个大致的了解,用这个简单的dd.Ne ...

  3. 陈硕《网络编程实战》目录

    陈硕<网络编程实战>目录 00.前言 01.网络编程概要.mkv 02.一个TCP的简单实验.mkv 03.课程内容大纲.mkv 04.回顾基础的Sockets API.mkv 05.TT ...

  4. 陈硕《网络编程实战》01 网络编程概要

    陈硕<网络编程实战> 01 网络编程概要 站在巨人的肩膀之上. 按照录像整理,部分专有名词不太肯定,版权归陈硕大神. 大家好,我是陈硕,受邀讲授一门有关网络编程的在线课程,这门课程的名称是 ...

  5. 陈硕《网络编程实战》 02 一个TCP的简单实验

    [稿] 陈硕<网络编程实战> 02 一个TCP的简单实验 站在巨人的肩膀之上. 按照录像整理,部分专有名词不太肯定,版权归陈硕大神. 实验用的是我家里的几台计算机,第一台的主机名叫atom ...

  6. 陈硕《网络编程实战》00 前言

    陈硕<网络编程实战> 第 00 课 前言 站在巨人的肩膀之上,还要抓牢,不要掉下去.    按照录像整理,版权归陈硕大神. 作者简介: 陈硕,北京师范大学硕士,擅长 C++ 多线程网络编程 ...

  7. Qt网络编程实战之HTTP服务器-安晓辉-专题视频课程

    Qt网络编程实战之HTTP服务器-30196人已学习 课程介绍         设计了一个实用的HTTP服务器,基于Qt的网络框架实现.先详细介绍Qt的网络.IO.线程..自定义事件.配置文件等类库的 ...

  8. Python 异步网络编程实战

    Python 异步网络编程实战 - songcser - 掘金小册 小册介绍 第一部分是对 Python 协程的讲解,从字节码开始简单讲解了 Python 虚拟机的执行过程,可以大体了解到 Pytho ...

  9. 基于Winsock API的VC网络编程实战

    基于Winsock API的VC网络编程实战 随着计算机信息技术的飞速发展,互联网与人类社会的工作.生活越来越紧密相关,它已经成为人类获取.交流信息的重要途径和手段.所以当前对于开发人员来说,网络编程 ...

最新文章

  1. iOS 11开发教程(十四)iOS11应用代码添加视图
  2. iOS音频播放(一):概述
  3. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
  4. Linus Torvalds:回顾Linux20年
  5. 分区partition是否只保存一部分数据?
  6. 手动升级ubuntu 18.04内核从4.15.0-45-generic到4.15.0-52-generic
  7. java8与hibernate_如何在JPA和Hibernate中使用Java 8 LocalDateTime
  8. SAP 产品条码WMS结合 以及ABAP script的集成 BarCode
  9. python中的scale_Python Matplotlib.pyplot.yscale()用法及代码示例
  10. html图片透明度变化,css,_CSS3动画实现图片透明度变化在微信上无效的解决方案,css - phpStudy...
  11. Vijos训练计划 1-1 计数问题
  12. linux firefox插件开发教程,如何在Linux上添加Firefox插件?
  13. NSSCTF部分复现
  14. 谷歌浏览器如何安装插件
  15. python实现ItemCF算法
  16. zepto和jquery
  17. win10下解决编译环境find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer
  18. 期待第二届云计算大会
  19. 教你如何与领导打交道
  20. 插入top.php,CmsTop手动区块(就是phpcms的碎片)的内容支持三种添加方式

热门文章

  1. MySQL 5.7安装教程(win10)
  2. 面试官让我滚,我用了20分钟,狠狠装了一回逼!
  3. 前端文字超出部分省略号代替
  4. git pull 无响应_git clone 和 git pull 代码无响应
  5. 最有效的期货趋势策略:期货反向跟单
  6. 写给一个外汇女交易员的信(连载四)
  7. 1/t的傅里叶变换证明
  8. PROFIBUS光纤模块在污水处理系统中的应用
  9. android怎么监听多点触摸_Android多点触摸交互处理
  10. JPA只实现局部字段更新的解决办法(一)