如何保证消息的可靠传输?
意思是: 客户端把消息发送出去了,只要客户端这里显示他的消息发送成功,就要保证对端一定要收到,要么收不到,客户端就显示发送失败,用户后续选择重新发送消息。如果客户端显示消息发送成功,就一定保证对端一定收到这条消息。
我们可以在业务层实现消息的确认机制(结合心跳):在消息发送之后对端给予响应。
问题: 集群聊天服务器是基于TCP协议实现的,TCP协议本身是可靠的传输协议,在发送数据的时候,有超时重传机制,TCP发送每一个数据的时候,都会等待得到接收方返回的ACK消息确认,它如果得不到ACK,就会超时重传,选择重新发送这个数据,得到ACK确认之后,保证消息发送成功了。为什么业务层上还要实现消息确认机制呢?
(业务层的消息可靠传输肯定不能由TCP协议超时重传来保证的!)

这个send的返回值大于0,发送成功了,返回了发送成功的字节数,但是并不代表着这条消息跑到对端,对端接收到了。
send怎么可能是调用的时候还包括客户端往服务器发送的过程和服务器接收到了,然后响应,响应成功了,send才返回?
不可能的!如果是这样的话,send调用所花费的时间就非常长了,尤其是在网络环境非常复杂的情况
本文讨论了在TCP协议基础上如何确保聊天消息的可靠传输。虽然TCP提供了超时重传机制,但业务层仍需实现消息确认机制,如缓存消息、等待ACK响应并设置超时重传策略,结合心跳检测来保证消息的准确传递。TCP的send返回值仅表示数据拷贝到内核缓冲区,不代表消息已到达对端。因此,必须在应用层实现消息的可靠传输机制。
订阅专栏 解锁全文
1922

被折叠的 条评论
为什么被折叠?



