大家应该还记得我们文章开头提到过,为了简单,就将服务器那一方给省略了,从三端通信变成了两端通信,所以才有了这个丢包问题 。
现在我们重新将服务器加回来 。
聊天软件三端通信
大家有没有发现,有时候我们在手机里聊了一大堆内容,然后登录电脑版,它能将最近的聊天记录都同步到电脑版上 。也就是说服务器可能记录了我们最近发过什么数据,假设每条消息都有个 id,服务器和聊天软件每次都拿最新消息的 id 进行对比,就能知道两端消息是否一致,就像对账一样 。
对于发送方,只要定时跟服务端的内容对账一下,就知道哪条消息没发送成功,直接重发就好了 。
如果接收方的聊天软件崩溃了,重启后跟服务器稍微通信一下就知道少了哪条数据,同步上来就是了,所以也不存在上面提到的丢包情况 。
可以看出,TCP 只保证传输层的消息可靠性,并不保证应用层的消息可靠性 。如果我们还想保证应用层的消息可靠性,就需要应用层自己去实现逻辑做保证 。
那么问题叒来了,两端通信的时候也能对账,为什么还要引入第三端服务器?
主要有三个原因 。
所以看到这里大家应该明白了,我把服务端去掉,并不单纯是为了简单 。
总结
数据从发送端到接收端,链路很长,任何一个地方都可能发生丢包,几乎可以说丢包不可避免 。
平时没事也不用关注丢包,大部分时候 TCP 的重传机制保证了消息可靠性 。
当你发现服务异常的时候,比如接口延时很高,总是失败的时候,可以用 ping 或者 mtr 命令看下是不是中间链路发生了丢包 。
TCP 只保证传输层的消息可靠性,并不保证应用层的消息可靠性 。如果我们还想保证应用层的消息可靠性,就需要应用层自己去实现逻辑做保证 。
- 用了TCP协议就一定不会丢包吗
- 面试必问! JUC 常用 4 大并发工具类是哪几个?
- 人卫增值服务官网 人卫增值服务是干嘛的
- 医社保查询官网 社保 医保查询
- 云松学生空间网址 云松学生空间app官网
- 世界黑帽大会 BlackHat官方APP出现两个逻辑漏洞
- 数据挖掘和机器学习20个面试问题
- 持续更新ing 软件测试面试常见问题总结
- 计算机宽带拨号测试,100M宽带,连光调制解调器拨号联通官网速度测试为100m
- gcForest 多粒度级联森林官方库安装及使用教程(通俗易懂)