聊天功能设计

我们一个多页面的H5应用产品,需要有聊天功能,和微信类似,我们的聊天也是有和所有人的聊天列表页面,有和单个人的聊天详情页面,聊天内容有文字和图片,未来可能有表情。预研了市场上的聊天工具,最后选了环信web版本的聊天工具.
由于聊天需要客户端和对方的服务器建立长链接,因此采用iframe的方式,主页面没有任何页面元素,只是有js逻辑,其他页面都在主页面的iframe里面。主页面负责和环信服务器建立长链接,和它进行通信,如果有消息,就通知子页面,如果当前子页面需要响应消息,则处理。
聊天记录环信只给保存3天的,内容还是得我们自己保存。我们保存图片和文字最好是一开始用户点击的时候就先把内容上传到服务器上,如果图片还得上传到七牛云上,等服务器返回图片的id后再通过环信把消息发推送给对方。实际上我们可以只拿环信当通道,传递json字符串,理论上我们只调用他发送普通消息的接口,就可以传递任何消息,并且图片类的消息我们可以只传递图片id,对方收到类型为图片的消息后,可以拼上七牛的图片前缀,对方就可以看到图片了,但是环信是看不到图片的,更好地保护用户的隐私。
然后就是后台数据库设计了,如果按照传统的方式保存在mysql下,数据库肯定受不了,如果保存在mongodb下或是 Elasticsearch下,则业务进程还得连接相关的数据库,增加系统的复杂度,我们并不是一个聊天应用,用户的聊天场景不是特别多。那就简单一点来,以Json形式将双方的聊天记录放到MySQL数据库下面,为了保证数据库的io,限制一个人每个月和每个人的聊天数据每1000条保存到一条json下。数据库设计这里除了要记录用户的聊天记录以外,还需要能迅速找到用户和谁聊天,每个月聊天次数,以便程序能迅速决定向哪个聊天的json里面写数据。这里设计了3个表,一个表记录用户和谁聊天了,最后聊天内容和形式,有多少消息用户没有看过,主要用来展示聊天列表页。一个表记录每个用户和对方每月聊天的每个json的数据量,用来迅速决策,当月聊天是否满1000条,如果满了,则要另外拆成一个json来记录数据了。最后一个表用来记录双方的聊天记录,只有一个id和一个JSON数据。

你可能感兴趣的:(架构)