欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

安卓-仿微信IM软件客户端数据库设计-PHP.cn问答

最编程 2024-06-08 21:23:35
...
  • 首先,你需要一个用户资料服务器,用来存储用户信息,用户名,以及用户ID等,这一块的数据库可以用一个单独的服务器来托管。

  • 其次,你还需要一个IM服务器,IM服务器用来接受客户端的长连接,当客户端登陆IM服务器时,需要 携带着ID发送连接命令,IM服务器用一个HashMap来保存<ID,Socket Object>,另外还需要一个HashMap来保存<ID,Socket State>来进行用户状态的一些逻辑。

  • 对于IM这种高并发的项目,建议用Redis这种内存数据库,我的做法是,一个Redis库来保存用户的待发送消息,用ID做Key,待发送的消息编号列表做Value;另一个Redis库来储存消息实体,自增ID做Key,序列化后的消息做Value。

  • 其次是保证消息的不丢失,我现在的方案是,每个客户端发送的每条消息都有一个uid,格式化是客户端发送消息时的时间戳-客户端ID,这样只要客户端没收到服务端的ACK信号(应用层),就一直重发这条消息,但是uid不变,服务端检查uid,如果和数据库里面的重复,就把消息丢弃,再发送一个ACK信号,这样就可以保证客户端发出的消息能到达服务端。

  • 服务器每次接收到新的消息时,都查看收信者,假设收信者ID是5,那我们就把5所有待接收的消息全发送给5。
    具体的可以看一下NoNOIM