一篇搞懂TCP、HTTP、Socket、Socket连接池
点击关注公众号,回复“2T”获取2TB学习资源!
互联网架构师后台回复 2T 有特别礼包
作者:数澜科技
链接:https://www.jianshu.com/p/e47a766e03da
七层网络模型

TCP和UDP连接

可以看到一次tcp请求的建立及关闭至少进行7次通信,这还不包过数据的通信,而UDP不需3次握手和4次分手。
TCP和UDP的区别
TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。 也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。
问题


编辑文件,加入以下内容:

net.ipv4.tcp_fin_timeout 修改系統默认的TIMEOUT时间。
Socket长连接
什么时候用长连接,短连接?
什么是心跳包为什么需要:
服务端:


客户端代码:

客户端输出结果:

定义自己的协议

日志打印:

客户端

日志打印:

Socket连接池
空闲可使用的长连接队列 正在运行的通信的长连接队列 等待去获取一个空闲长连接的请求的队列 无效长连接的剔除功能 长连接资源池的数量配置 长连接资源的新建功能

初始化连接池

使用连接池
下面连接池的使用,使用的协议是我们之前自定义的协议。

日志打印:

源码分析
构造函数:lib/Pool.js




上面的代码就按种情况一直走下到最终获取到长连接的资源,其他更多代码大家可以自己去深入了解。
-End-
正文结束
1.心态崩了!税前2万4,到手1万4,年终奖扣税方式1月1日起施行~
评论