Starved2023年09月19日
125阅读

作品详情

后端全部由我开发。支持单聊、群聊、心跳。不支持音视频。底层协议使用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(时间戳)从小到大的顺序,一次拉取200条,并判断是否有多余的消息,返回给前端。若有多余消息,则循环拉取,直到取完为止。

- IM:MESSAGE_CACHE这个key首次写入时设置过期时间:7天。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论