聊天功能的完整实现

本文详细介绍了如何实现聊天功能,包括网页和手机应用的不同考虑,旨在提供一个完整的解题思路。作者分享了一张效果图,并表示期待与读者进行讨论,认为所提出的结构虽完整但可能较复杂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


最近做的项目又牵扯到聊天功能(此处发誓我们不是做社交的!),虽然网页聊天和手机应用不大一样,还是想要理一理及时聊天的解题思路,大家可以参考这个模型,自我感觉结构是完整了但有点复杂,非常欢迎任何形式的探讨。
先放张效果图:


chat


接下来会把聊天功能的实现分成两个部分来解释,这一篇主要是数据在客户端和服务器之间传输过程;另个篇主要讲讲我怎么设计并区分聊天过程中消息的不同状态的(三个状态:正在发送,发送成功,发送失败,而这张图里貌似没有- -)。
用户第一次打开App的时候网络层已经向服务器发起长链接,并且服务器查数据库将新消息返回给客户端,客户端将新数据保存到本地数据库。
用户第一次进入某个聊天状态的时候,业务层取出本地数据库的聊天数据,并将一些聊天相关的数据保存在内存,以便随时显示和更改。由于服务器和客户端的数据库状态要保持一致(网页聊天就不用了,因为每次都是重新向服务器请求所有聊天记录,除非网页有做缓存。App就不得行,你没网就也要让人家看到历史记录),所以需要把当前聊天的最后一条已读消息ID发给服务器记录。初始化了数据,就启用一个定时器线程来刷新界面,间隔40ms刷新一次,一般用户是感觉不到的。

FirstReq


用户这个时候要发消息了!
A编辑好内容,点击发送按钮想要发给B,客户端程序先把数据存入本地数据库,然后再将数据加入聊天界面显示的列表(记着:刷新界面的线程还在定时工作呢!),此时消息状态应该还处于正在发送中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值