跳到主要内容

im设计

IM-server服务端:

1、用于接收 Client 连接、消息推送等功能。支持集群部署。

2、检测客户端存活状态,心跳时间为300秒/500秒,心跳过快耗电过多,心跳过慢有可能被电信运营商切断连接

3、设备/用户登录退出操作,更新Redis中的状态

4、消息进行双向确认/重传/去重。发送消息后,客户端必须回复ACK确认包,才认为已成功。否则进行重传,客户端对服务器推送的消息进行去重,避免收到重复的消息。

2、Route消息路由服务器:

1、检测IM-server的存活状态

2、支持权限认证

3、根据服务器的状态,按照一定的算法,计算出该客户端连接到哪台IM-server,返回给客户端,客户端再去连接到对应的服务端。

4、如果 IM-server宕机,会自动从Redis中当中剔除

5、IM-server上线后连接到Route,自动加 入Redis

6、可以接受来自PHP代码、C++程序、Java程序的消息请求,转发给用户所在的IM-server

3、Client客户端

1、消息通讯,及消息应答ack

2、心跳保持及断开重连

流程图:

整体的流程也比较简单,流程图如下:

1、客户端向 Route 发起登录。

2、登录成功从 redis当中选择可用 im-server 返回给客户端,并保存登录、路由信息到 Redis。

3、客户端向 im-server 发起长连接,成功后保持心跳。

4、客户端下线时清除状态信息。