在前面几篇中,我给大家介绍了socket的相关知识,也给出了详细的代码,从socket的基本介绍,到IO多路复用,以及粘包拆包,最后到心跳包问题。总的来说大概都把socket网络编程中能碰见的问题都讲了,但肯定讲得不够深入,会有一些遗漏,如果有哪些知识点技术点的遗漏,欢迎大家指出,本人虚心接受。
现在我将socket网络编程前面几篇讲的内容重新梳理一遍。
《socket网络编程(一)——初识socket》。主要介绍了我们为什么需要socket,以及socket的相关函数,掌握这些函数你并不能写出很好的网络编程的代码,但是不掌握这些,你绝对写不出来。这些函数是socket网络编程的基石,任何复杂的网络通信底层肯定都有这些函数。
《socket网络编程(二)——实现持续发送》。要在网络通信的过程中持续地发送消息,而服务不会断掉,这个是必须掌握的。以及在持续发送的过程中碰见的一些怪异问题,该篇幅中有给大家介绍,以及给出了解决办法。
《socket网络编程(三)——select多路复用问题》。当有多台客户端的时候,我们又该如何通信呢?如何准确地把消息发到对应的客户端呢?这些都是多路复用该考虑的问题,这篇文章里通通都会给大家介绍。
《socket网络编程(四)——epoll多路复用问题 》。当服务达到了百万级、千万级的并发的时候,select多路复用就几乎是无能为力了,即使能做,也是影响效率,这是他的底层机制所决定的。所以就需要epoll多路复用了,如果你想搭建一个千万级的并发的系统,那么网络通信的底层必须是要用epoll。
《socket网络编程(五)——粘包拆包问题 》。TCP协议的通信机制导致了通信过程中会发生粘包和拆包的问题,这篇文章给大家介绍了发生的原因以及解决的办法,也给出了详细的代码。
《socket网络编程(六)——心跳包问题 》。心跳包也是在socket网络编程中要考虑的问题,主要用于检测客户端与服务端的连接是否还在,具体的实现大家可以参考这篇文章。
以上就是socket网络编程中需要掌握的地方,每篇文章都给出了详细的代码步骤,实践会偏多,理论知识点可能有点偏少。像TCP三次握手四次挥手这样经典的过程就并没有讲,网络讲解非常多,大家可以自己去搜搜看。后期如果有时间,我再来阐述。
毫不夸张地说,只要是为了实现网络通信,不管是C++、JAVA、PYTHON、LUA还是其他的语言,也不管是多么复杂难懂的框架,他们的底层框架都考虑到以上的东西,所以只要掌握了以上的理论知识,都可以很好的驾驭各种框架,甚至未来你可以写出属于自己网络通信的框架来,这就是所谓的造轮子能力。
更多精彩内容,请关注同名公众:一点月光(alittle-moon)