265-聊天服务器和客户端如何保证消息的可靠传输

本文讨论了在TCP协议基础上如何确保聊天消息的可靠传输。虽然TCP提供了超时重传机制,但业务层仍需实现消息确认机制,如缓存消息、等待ACK响应并设置超时重传策略,结合心跳检测来保证消息的准确传递。TCP的send返回值仅表示数据拷贝到内核缓冲区,不代表消息已到达对端。因此,必须在应用层实现消息的可靠传输机制。

如何保证消息的可靠传输?

意思是: 客户端把消息发送出去了,只要客户端这里显示他的消息发送成功,就要保证对端一定要收到,要么收不到,客户端就显示发送失败,用户后续选择重新发送消息。如果客户端显示消息发送成功,就一定保证对端一定收到这条消息。

我们可以在业务层实现消息的确认机制(结合心跳):在消息发送之后对端给予响应。

问题: 集群聊天服务器是基于TCP协议实现的,TCP协议本身是可靠的传输协议,在发送数据的时候,有超时重传机制,TCP发送每一个数据的时候,都会等待得到接收方返回的ACK消息确认,它如果得不到ACK,就会超时重传,选择重新发送这个数据,得到ACK确认之后,保证消息发送成功了。为什么业务层上还要实现消息确认机制呢?

业务层的消息可靠传输肯定不能由TCP协议超时重传来保证的!

在这里插入图片描述

这个send的返回值大于0,发送成功了,返回了发送成功的字节数,但是并不代表着这条消息跑到对端,对端接收到了。

send怎么可能是调用的时候还包括客户端往服务器发送的过程和服务器接收到了,然后响应,响应成功了,send才返回?

不可能的!如果是这样的话,send调用所花费的时间就非常长了,尤其是在网络环境非常复杂的情况

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkingF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值