一种基于全局单调序列号的移动端即时通讯信号同步方法
【技术领域】
[0001]本发明涉及企业即时通讯技术领域,尤其是涉及一种基于全局单调序列号的移动端即时通讯信号同步方法。
【背景技术】
[0002]企业即时通讯系统(以下简称企业頂)是一种针对企业办公人员的网络沟通服务。沟通的内容包括文字、图片、语音、视频等。
[0003]在企业即时通讯系统中,群组的沟通无论是文字还是语音都需要大量的即时通信消息传输,现有的消息传输流程是这样的:消息发送者通过企业IM客户端向其所在一个群组发送聊天消息,企业頂服务端接收到请求后,对该群组的其他成员进行一系列状态判定,如果消息接收者在企业IM中处于在线状态则将发送者请求传输的消息及其附加数据(发送者标示、发送者设备状态、消息号等等)发送给消息接收者,并向关系型数据库请求保存消息内容,以便消息接收者的其他设备登录企业IM时拉取离线消息;如果消息接收者在企业IM中处于离线状态,则直接向关系型数据库请求保存消息内容以便消息接收者登录企业IM时拉取离线消息。
[0004]如上所述的流程中存在比较大的问题。由于消息传输的是全量数据,当消息传输时非常消耗网络带宽,脱慢企业頂服务端运行效率,甚至造成企业頂服务端中断服务;当接收者的设备为移动端设备时还会造成设备反应迟钝、卡顿,甚至无法及时知晓其联系人发送过来的重要信息,从而严重影响企业頂用户的用户体验感和消息安全性。
【发明内容】
[0005]本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种可用性高、响应速度快的基于全局单调序列号的移动端即时通讯信号同步方法。
[0006]本发明的目的可以通过以下技术方案来实现:
[0007]一种基于全局单调序列号的移动端即时通讯信号同步方法,该同步方法运行于由移动设备客户端和服务器组成的企业即时通讯系统中,所述服务器包括连接服务器、消息处理中心和存储设备,一移动设备客户端对应一群组成员,所述同步方法实现企业即时通讯系统中群组成员间的即时通讯消息的同步,包括:
[0008]群组成员个人单调序列号队列的建立步骤;
[0009]群组成员发送即时通讯消息的步骤;
[0010]其他群组成员根据对应的个人单调序列号队列同步接收所述即时通讯消息的步骤。
[0011]所述群组成员个人单调序列号队列的建立步骤在一群组成员加入群组时执行,具体为:
[0012]Ia)消息处理中心获得加入群组消息后,读取存储设备中该群组的公共消息队列的最大消息号;
[0013]lb)判断存储设备中是否保存有与新加入的群组成员相应的个人单调序列号队列,若是,则调用该个人单调序列号队列,执行步骤Ic),若否,则生成与该新加入的群组成员的个人单调序列号队列,执行步骤Ic);
[0014]Ic)消息处理中心生成新加入的群组成员相对于群组的全局单调序列号;
[0015]Id)消息处理中心将步骤Ia)中获取的最大消息号与步骤Ic)中生成的全局单调序列号相结合,生成个人队列数据,加入步骤Ib)获得的个人单调序列号队列中;
[0016]Ie)存储设备保存更新后的个人单调序列号队列。
[0017]所述群组成员发送即时通讯消息的步骤具体为:
[0018]2a)连接服务器接收到一群组成员通过移动设备客户端发送的一条即时通讯消息后,将该即时通讯消息转发至消息处理中心;
[0019]2b)消息处理中心判断所接收到的即时通讯消息的状态是否正常,若是,则执行步骤2c),若否,则生成对应的错误码,通过连接服务器反馈给移动设备客户端,返回步骤2a);
[0020]2c)消息处理中心对接收到的即时通讯消息进行整合标示,生成消息数据,保存入存储设备的公共消息队列中。
[0021]所述即时通讯消息的状态包括消息发送状态和发送消息的移动设备状态。
[0022]所述步骤2c)中,对接收到的即时通讯消息进行整合标示具体为:生成新消息号,将新消息号发送消息的移动设备状态、接收到的即时通讯消息组合。
[0023]所述其他群组成员根据对应的个人单调序列号队列同步接收所述即时通讯消息的步骤具体为:
[0024]3a)消息处理中心通过连接服务器向其他群组成员发送接收到新消息的通知;
[0025]3b)其他群组成员通过移动设备客户端向连接服务器发送消息同步请求;
[0026]3c)连接服务器将接收到的消息同步请求转发至消息处理中心;
[0027]3d)消息处理中心验证发送消息同步请求的移动设备客户端是否正常,若是,则执行步骤3e),若否,则发送相应的错误码至移动设备客户端,返回步骤3b);
[0028]3e)读取存储设备中群组的公共消息队列及发送消息同步请求的群组成员的个人单调序列号队列;
[0029]3f)消息处理中心比较公共消息队列的最大消息号和个人单调序列号队列中保存的关于该群组的最大消息号,判断前者是否大于后者,若是,则执行步骤3g),若否,则结束本次同步请求;
[0030]3g)消息处理中心将新的消息数据通过连接服务器发送给发送消息同步请求的移动设备客户端;
[0031]3h)移动设备客户端显示新的消息数据,并更新对应群组成员的个人单调序列号队列。
[0032]所述步骤3h)中,更新对应群组成员的个人单调序列号队列具体为:自增全局单调序列号,并将公共消息队列中的最大消息号与其对应,重新存储到存储设备中。
[0033]所述存储设备为无关系型存储设备。
[0034]与现有技术相比,本发明基于全局单调序列号的移动端即时通讯信息同步方法更高效,高可用性,更安全,具体优点如下:
[0035]I)尚并发和尚可用性:
[0036]无关系型数据存储设备比关系型数据库更具高并发性和高可用性,对处理消息数据这样的大量数据有先天优势,高并发性和高可用性可以大大提升数据安全性和响应敏捷度;
[0037]2)快速感知:
[0038]由于消息处理中心处理完消息数据后只给移动端推送消息到达通知,数据包会小很多,用户可以更即时的感知消息数据的存在;
[0039]3)快速响应:
[0040]个人单调序列号队列与消息队列存储分离,可以让消息中心更快速更平稳的获取数据,减少存储空间和瓶颈点,更快速地响应业务需求;
[0041]4)量身定制:
[0042]分批将消息数据同步给用户的移动端设备,充分考虑到了移动设备客户端具有碎片网络连接和CPU占有时间,存储设备容量小等特征;
[0043]5)可扩展性好:
[0044]系统在设计时,充分考虑了今后的扩展需求,比如新增其他业务数据同步需求时,系统可以做到完全对旧版本的兼容;
[0045]6)消息完整且有序:
[0046]这种同步机制可以保证:消息不会因为移动端网络问题丢失消息、消息是一定会有序到达、可以多个设备之间同步到完整消息流。
【附图说明】
[0047]图1为本发明同步方法对应的企业即时通讯系统结构示意图;
[0048]图2为本发明创建个人单调序列号队列流程示意图;
[0049]图3为本发明中消息上行流程示意图;
[0050]图4为本发明中消息下行流程示意图。
【具体实施方式】
[0051]下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
[0052]如图1所示,本实施例提供一种基于全局单调序列号的移动端即时通讯信号同步方法,运行于如图1所示的企业即时通讯系统中,该企业即时通讯系统包括移动设备客户端4和服务器,所述服务器包括连接服务器3、消息处理中心2和存储设备1,移动设备客户端4设有多个,一移动设备客户端对应一群组成员。所述同步方法实现企业即时通讯系统中群组成员间的即时通讯消息的同步,包括:群组成员个人单调序列号队列的建立步骤;群组成员发送即时通讯消息的步骤;以及其他群组成员根据对应的个人单调序列号队列同步接收所述即时通讯消息的步骤。
[0053]下面以一个10人的群组聊天为例,结合图2、3、4对以下同步消息控制进行具体描述:
[0054]在SlOl步骤中,公司员工Jack正在使用企业即时通讯软件1S版客户端;
[0055]在S102步骤中,Jack收到公司员工Andy的邀请加入了一个群Group ;
[0056]在S103步骤中,Jack加入Group的事件被其他服务器角色通知到了消息中心;
[0057]在S104步骤中,消息中心从存储设备中获取Group群的公共消息队列并确定该队列中的最大消息号;
[0058]在S105步骤中,消息中心尝试从存储设备中获取Jack的个人单调序列号队列;
[0059]在S106步骤中,结合S105步骤,消息中心会判别获取Jack的个人队列是否成功,如果不成功消息中心会创建Jack的个人单调序列号队列;
[0060]在S107步骤中,消息中心会为Jack生成对于Group群的全局单调序列号;
[0061]在S108步骤中,结合S104步骤,消息中心会将S104步骤中获取的Group最大消息号与S107步骤中生成的全局单
调序列号相结合,生成个人队列数据,并存储到Jack的个人单调序列号队列中;
[0062]在S109步骤中,消息中心会将Jack的经过以上步骤更新过的个人单调序列号队列重新存储到无关系型存储设备中。
[0063]如图3所示,Jack加入Group群后可向群组内的其他成员发送消息,具体为:
[0064]在S201步骤中,Jack刚刚加入Group群后就跟大家打了招呼,发送了一条“helloevery one ! ”的聊天消息;
[0065]在S202步骤中,Jack的这条聊天消息经过1S版客户端发送到了连接服务器;
[0066]在S203步骤中,连接服务器将Jack的这条聊天消息再转发到消息中心;
[0067]在S204步骤中,消息中心接收到连接服务器转发来的聊天消息后,会先校验Jack的设备状态是否正常,如果不正常(例如消息重复发送,设备数据异常等等)会告知连接服务器相应的错误码(例如101表示消息重复发送,102表示设备数据异常等等),再由连接服务器向Jack使用的1S客户端转发;
[0068]在S205步骤中,结合S204步骤,如果消息中心校验Jack的数据均为正常,则会为Jack的这条聊天消息生成完整的消息流数据,包括生成新的消息号、Jack的设备状态(发送者的数据)等等,使“hello every one ! ”这样一条聊天消息被标示,以便各个服务器角色和客户端可以对其进行处理;
[0069]在S206步骤中,结合S205步骤,消息中心会将整合好的这样一条消息数据存储到Group群在无关系型存储设备中的公共消息队列中;
[0070]在S207步骤中,结合S206步骤,当Jack发送的“hello every one!”消息在无关系型存储设备中保存成功后,消息中心会通过连接服务器通知Gixnip群的其他群成员Andy、Elena、Allen等人,他们所在的Group群有人说了句话(任何形式的聊天消息包括文字,语音,图片等等都会如此通知)。
[0071]以下同步群组消息的过程以图4为示,以Group群中的Elena为例来进行详细描述,群组中的其他成员接到消息中心的消息到达通知后的同步控制与Elena相同。
[0072]在S301步骤中,结合S207步骤,Elena的移动客户端收到消息到达通知;
[0073]在S302步骤中,结合S301步骤,客户端会向连接服务器请求同步Group群的聊天消息;
[0074]在S303步骤中,连接服务器将Elena的同步请求转发至消息中心;
[0075]在S304步骤中,消息中心会执行与步骤S204 —致的过程对Elena的客户端进行校验;
[0076]在S305步骤中,消息中心会从无关系型存储设备中获取Group的公共消息队列;
[0077]在S306步骤中,消息中心会从无关系型存储设备中获取Elena的个人单调序列号队列;
[0078]在S307步骤中,消息中心会获取Elena的个人单调序列号队列中关于Group群的数据,得到单调序列号和与之对应的Group群的消息号;
[0079]在S308步骤中,结合S305、S307步骤,消息中心会对比Elena的个人队列中的消息号和Group群公共消息队列的消息号;
[0080]在S309步骤中,结合S308步骤,如果消息中心发现Elena个人队列的消息号小于了 Group公共消息队列的最大消息号,说明已经有新的消息数据生成,否则说明没有新的消息数据生成,则结束本次同步请求;
[0081]在S310步骤中,结合S309步骤,如果消息中心判定有新的消息数据生成,消息中心会将Jack发送的“hello every one !”这条消息数据通过连接服务器发送到Elena的移动客户端;
[0082]在S311步骤中,结合S310步骤,消息数据已经发送给了 Elena的移动客户端,消息中心会更新Elena个人单调序列号队列中关于Group群的数据,会将单调序列号自增,并将Group群公共消息队列中最大的消息号与新单调序列号对应,存储到Elena的个人单调序列号队列中,再将该队列重新存储到无关系型存储设备中;
[0083]在S312步骤中,Elena的移动客户端通过连接服务器接收到消息中心推送过来的消息数据后,处理消息数据并在聊天窗口中显示出来,Elena就会在移动端的群聊天窗口中看到 Jack 说的 “hello every one ! ”。
【主权项】
1.一种基于全局单调序列号的移动端即时通讯信号同步方法,其特征在于,该同步方法运行于由移动设备客户端和服务器组成的企业即时通讯系统中,所述服务器包括连接服务器、消息处理中心和存储设备,一移动设备客户端对应一群组成员,所述同步方法实现企业即时通讯系统中群组成员间的即时通讯消息的同步,包括: 群组成员个人单调序列号队列的建立步骤; 群组成员发送即时通讯消息的步骤; 其他群组成员根据对应的个人单调序列号队列同步接收所述即时通讯消息的步骤。2.根据权利要求1所述的基于全局单调序列号的移动端即时通讯信号同步方法,其特征在于,所述群组成员个人单调序列号队列的建立步骤在一群组成员加入群组时执行,具体为: Ia)消息处理中心获得加入群组消息后,读取存储设备中该群组的公共消息队列的最大消息号; Ib)判断存储设备中是否保存有与新加入的群组成员相应的个人单调序列号队列,若是,则调用该个人单调序列号队列,执行步骤Ic),若否,则生成与该新加入的群组成员的个人单调序列号队列,执行步骤Ic); Ic)消息处理中心生成新加入的群组成员相对于群组的全局单调序列号; Id)消息处理中心将步骤Ia)中获取的最大消息号与步骤Ic)中生成的全局单调序列号相结合,生成个人队列数据,加入步骤Ib)获得的个人单调序列号队列中; Ie)存储设备保存更新后的个人单调序列号队列。3.根据权利要求1所述的基于全局单调序列号的移动端即时通讯信号同步方法,其特征在于,所述群组成员发送即时通讯消息的步骤具体为: 2a)连接服务器接收到一群组成员通过移动设备客户端发送的一条即时通讯消息后,将该即时通讯消息转发至消息处理中心; 2b)消息处理中心判断所接收到的即时通讯消息的状态是否正常,若是,则执行步骤2c),若否,则生成对应的错误码,通过连接服务器反馈给移动设备客户端,返回步骤2a); 2c)消息处理中心对接收到的即时通讯消息进行整合标示,生成消息数据,保存入存储设备的公共消息队列中。4.根据权利要求3所述的基于全局单调序列号的移动端即时通讯信号同步方法,其特征在于,所述即时通讯消息的状态包括消息发送状态和发送消息的移动设备状态。5.根据权利要求4所述的基于全局单调序列号的移动端即时通讯信号同步方法,其特征在于,所述步骤2c)中,对接收到的即时通讯消息进行整合标示具体为:生成新消息号,将新消息号发送消息的移动设备状态、接收到的即时通讯消息组合。6.根据权利要求1所述的基于全局单调序列号的移动端即时通讯信号同步方法,其特征在于,所述其他群组成员根据对应的个人单调序列号队列同步接收所述即时通讯消息的步骤具体为: 3a)消息处理中心通过连接服务器向其他群组成员发送接收到新消息的通知; 3b)其他群组成员通过移动设备客户端向连接服务器发送消息同步请求; 3c)连接服务器将接收到的消息同步请求转发至消息处理中心; 3d)消息处理中心验证发送消息同步请求的移动设备客户端是否正常,若是,则执行步骤3e),若否,则发送相应的错误码至移动设备客户端,返回步骤3b); 3e)读取存储设备中群组的公共消息队列及发送消息同步请求的群组成员的个人单调序列号队列; 3f)消息处理中心比较公共消息队列的最大消息号和个人单调序列号队列中保存的关于该群组的最大消息号,判断前者是否大于后者,若是,则执行步骤3g),若否,则结束本次同步请求; 3g)消息处理中心将新的消息数据通过连接服务器发送给发送消息同步请求的移动设备客户$而; 3h)移动设备客户端显示新的消息数据,并更新对应群组成员的个人单调序列号队列。7.根据权利要求6所述的基于全局单调序列号的移动端即时通讯信号同步方法,其特征在于,所述步骤3h)中,更新对应群组成员的个人单调序列号队列具体为:自增全局单调序列号,并将公共消息队列中的最大消息号与其对应,重新存储到存储设备中。8.根据权利要求1-7任一所述的基于全局单调序列号的移动端即时通讯信号同步方法,其特征在于,所述存储设备为无关系型存储设备。
【专利摘要】本发明涉及一种基于全局单调序列号的移动端即时通讯信号同步方法,该同步方法运行于由移动设备客户端和服务器组成的企业即时通讯系统中,所述服务器包括连接服务器、消息处理中心和存储设备,一移动设备客户端对应一群组成员,所述同步方法实现企业即时通讯系统中群组成员间的即时通讯消息的同步,包括:群组成员个人单调序列号队列的建立步骤;群组成员发送即时通讯消息的步骤;其他群组成员根据对应的个人单调序列号队列同步接收所述即时通讯消息的步骤。与现有技术相比,本发明具有可用性高、响应速度快等优点。
【IPC分类】H04L12/58
【公开号】CN104901865
【申请号】CN201510189758
【发明人】乔月猛
【申请人】上海云睦网络科技有限公司
【公开日】2015年9月9日
【申请日】2015年4月20日