心跳:心脏还在跳动,解释还有生命迹象,还活着,还活着就表示还可以连续事情,生命不止,事情不息。
why为什么须要心跳检测?这个小孩没娘,说来话长,long long ago ,TCP协议的出身,惊天地泣鬼神,改变了天下。
建立连接:三次握手

建立连接
断开连接:四次挥手 ♂️
断开连接
趣解:
寓言两则:(client、server的精彩对话)。此故事纯属虚构,如有雷同,不好意思。
人物一:小C(client 客户端)
人物二:大S (server 做事端)
场景一:初识(建立连接 ——三次握手)
小C:很高兴认识你,我想和你处工具。
大S:看你挺有诚意的,我赞许
小C:收到对方的复书,欣喜若狂,赶紧再说:“你等着我啊,立时咱们就(美好的生活)”;
(第一次握手:客户端发送旗子暗记,我准备发送数据,客户端进入准备发送状态)
(第二次握手:做事端收到旗子暗记,并给客户端复书,做事端进入准备吸收状态)
(第三次握手:客户端收到复书,进入已连接状态,并给做事端确认,做事端收到,两端都进入建立连接状态)
场景二:依依惜别 (断开连接——四次挥手)
小C:我不想和你说话了,
大S:你是在开玩笑吧,
大S:(看到小C负责的脸庞,知道这不是玩笑),好吧
小C:你赞许就好,再见。(看这大S伤心而去,容身一段韶光,自己也离开了)
(第一次挥手:客户端发出关闭要求,此时不在发送数据。)
(第二次挥手:做事端收到要求并确认,做事端进入等待关闭状态——把自己想说的话,说完)
(第三次挥手:做事端向客户端发送确认关闭旗子暗记,此时不再发送数据,进入末了确认关闭状态)
(第四次挥手:客户端收到关闭要求,向做事端规复信息,做事端关闭。客户端会在稍后关闭)
详情查看:https://blog.csdn.net/qq_37837134/article/details/79738329
上面大略理解了TCP协议,那么有没有这样一种场景呢:只建立连接,而不断开连接
答案是肯定的,在繁芜的网络环境中,这种情形一定存在。例如:夏天用电高峰期负载高,断电了;我的家里刚通网,还是不很好,时常在高潮的时候莫名其妙的断网……
总之,无缘无端的不辞而别,总是存在的,没有那么完美的爱情。
what心跳机制:客户端定时发送 ping,做事端回答 pong。
ping、 pong 无分外意义,便是大略的通讯传输,朋友之间常联结,才不会生疏。韶光久了,做事端就要把你踢了,人的精力总是有限的,有的时候,整理自己的心情,会删除一些无用的通讯录。
做事真个资源也是有限的,那么就要把没用的fd 收回,重复利用。
fd 是什么?
fd (file descriptor) 文件描述符
统统皆文件,fd 就相称于索引,拿着这个标示去进行一系列操作。
swoole 中
$fd是TCP客户端连接的标识符,在Server实例中是唯一的,在多个进程内不会重复fd 是一个自增数字,范围是1 ~ 1600万,fd超过1600万后会自动从1开始进行复用$fd是复用的,当连接关闭后fd会被新进入的连接复用正在坚持的TCP连接fd不会被复用不要担心,同一台做事1600万的fd 不足自己用,由于做事器承受不了1600万的连接,如果真有这么多连接,肯定也便是单机了。
Howswoole 实际上已经实现了心跳检测机制,咱们只须要去开启配置就行了。如此方便,不得不赞,峰哥威武!
heartbeat_check_interval心跳检测 每隔多少秒,遍历一遍所有的连接heartbeat_idle_time心跳检测 最大闲置韶光,超时触发close并关闭 默认为heartbeat_check_interval的2倍,两倍是容错机制,多一点是网络延迟的填补
官方文档:https://wiki.swoole.com/wiki/page/283.html
当然,心跳机制也可以自己实现,定期轮询fd,是否在线,记录最近回话韶光,剔除超时的连接。
伪代码
结合业务fd 是一个连接,怎么和用户userId 绑定 —— 映射
userID1 --> fd 1
userID2 --> fd 2
预报:下篇讲 结合业务的映射 设计
映射
结束语生命不止,学习不息
左手代码,右手诗,意见意义学习新知识