前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于心跳机制设计,我的一点想法

关于心跳机制设计,我的一点想法

作者头像
看、未来
发布2021-10-20 16:43:28
5560
发布2021-10-20 16:43:28
举报

想法

忘了写哈,两年前的旧思想,今天放出来。

1、不要迷信TCP的保活机制,应用层不会知道的。

2、为什么一定要服务端向客户端发心跳包?两年前老师让我们这么写的时候我就提出了疑问,最后我毅然决然的选择了客户端向服务端发心跳。心跳机制对于服务器的意义是什么呢?在我的认知里,是服务器需要知道这个客户端是否还在线。如果客户端不在线了,就要做相应的资源回收或者标记工作。

那客户端呢?客户端心跳发不过去就知道自己挂了嘛,该重连就重连,不重连就关机呗。

我当时为什么会产生那样的想法?如果是服务端向客户端发心跳包,客户端收到心跳之后需要向服务端回一个心跳包,一来一回服务端需要处理两次包。而客户端向服务端发心跳就不同了,首先不需要去记录那么多的时间戳,统一一个时间戳,轮询一遍过去(本来就要轮询)看哪个客户端的心跳包没到,就清理掉即可。

心跳保活我觉得不是那么核心的业务,如果是长连接服务,一万台客户端动不动就掉线个一百台成何体统? 将资源消耗压下去,和日志等非核心业务挤一条线程嘛。

附:

长连接断开的原因

在长连接的情况下,双方的所有通信 都建立在1条长连接上(1次TCP连接);所以,长连接 需要 持续保持双方连接 才可使得双方持续通信

可是,长连接会存在断开的情况,而 断开原因 主要是:

代码语言:javascript
复制
长连接所在进程被杀死
NAT超时
网络状态发生变化
其他不可抗因素(网络状态差、DHCP的租期等等 )
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 想法
  • 附:
    • 长连接断开的原因
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档