赞
踩
本文在编写时参考引用了博客作者“Jack Jiang ????” “IM开发快速入门(一):什么是IM系统?”的相关资料,表示感谢。
IM的应用场景:IM广泛应用于聊天、社交等典型应用中,同时在聊天,直播,在线客服,物联网等所有需要实时互动、高实时性的场景中都有所应用。
例如熟为人知的场景:
IM典型架构如下:
对于接入层,它的职责最为关键,具体是:
IM技术的特性如下:
指保证消息的不丢失及不重复,是IM的重要特性。
指保证消息的实时送达,作为IM技术的关键意义。
指保证数据传输安全,数据存储安全,消息内容安全,是IM系统不可少得特性,尤其是在私聊的场景下,聊天记录的隐私性尤为重要。
对于单聊消息来说,同一设备的时间顺序,不同设备的蛮有同步,是相当重要的一环,IM系统中的消息交互,应当保证其前后顺序一直, 不允许前言不搭后语以及胡言乱语式消息的出现。
使用IM系统的第一步,就是要解决“跟谁聊”的问题。从功能表象上来说,联系人列表也就是社交关系列表,无非就是个信息列表界面,有什么特殊的地方?
联系人列表看似简单,实际上它是一系列IM系统的社交关系确立动作的结果体现。
要想建立联系人列表,你可能需要实现以下逻辑:
总的来说,联系人列表的建立,是一个IM系统聊天关系确立的表现,不可或缺。
是IM系统客户端的核心功能所在,所有主要的IM功能都是通过它展现。
它应该具备的能力有:
上图所示,消息发送通道这个比较好懂,最浅显易懂的理解就是用tcp或udp,建立socket长连接,需要发消息的时候,wirte一下就过去了,好简单!
但,事情往往不是想象的这么简单:
正如上节中的消息收发通道示意图所示,消息接收通道也很好理解,对方通过消息发送通道write的消息,我得收到并显示啊。
要实现一个可靠的消息接收通道,也并非易事:
1)如何保证socket长连接通道能随时处于良好的边接状态(随时接收对方write的消息);
2)当socket长连接断开时,对方发送消息该怎么实现?
3)当socket恢复连接时,怎么恢复之前的聊天现场?
4)当我收到对方的消息时,对方怎么知道我已经收到了?
5)当重复收到对方的消息时,该怎么处理?
6)当收到的消息时序有错乱,该怎么处理?
消息存储这个功能好理解,聊天的消息如果存储,下次再聊的时候就不知道之前聊过什么,做不到这一点,这个IM系统的聊天体验好不起来。
那么,哪些情况下需要进行消息存储呢:
具体要存储的内容和时机也就上面这几样。
但技术落到实处,要做的事情同样少不了:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。