后端全部由我开发。支持单聊、群聊、心跳。不支持音视频。底层协议使用http、Websocket。传输协议使用protobuf。发送消息走http,接收消息走Websocket。
关键点:单聊消息存取策略(不支持漫游,当前策略)
参考文章:http://www.52im.net/thread-3887-1-1.html
【写入消息】
消息接受者在线的话,服务器直接把消息写入对方socket,不进行任何持久化存储;离线消息直接写redis,7天有效期,有效期内被读走就立刻删掉。
redis存储:
key: IM:MESSAGE_CACHE:[s_uuid] (s_uuid是待拉取消息的用户,field中只包含别人发给自己的消息。不区分单聊和群聊,或者说field既可能是单聊消息,也可能是群聊消息)
field: 消息体
score:消息体中的send_time(毫秒时间戳)
示例:A给B发送一条消息a1,则向redis写入:
zadd IM:MESSAGE_CACHE:B a1 nowmili
【拉取消息】
自上而下,score(时间戳)从小