前提: 保证消息可靠的核心机制---超时、重传、确认,虽然TCP机制可以保证消息的可靠传递,但这是基于C/S或B/S通信,如果是A端-Server-B端需要在应用层去保证消息的可靠传递.
现状:和很多朋友聊天,说IM只需要5步就可以,为什么需要6步
场景:客户端A给客户端B发送一条消息(客户端A、B和服务端S)
过程
假设客户端B是在线状态
1、客户端A给服务端S发送一条消息
2、S根据消息id通过在线用户表找到客户端B的IP和端口,并给B发送一条消息
3、B收到消息并给服务端S返回已经收到消息的确认
4、S再给B一条已经收到消息的确认(如果S不给B确认,B会超时重传)
5、S给A发送一条B收到消息的确认
6、A给S回复一天确认消息(如果A不给S确认,S以为A没有收到,会触发超时重传)