消息续传方法和装置的制造方法_3

文档序号:8365408阅读:来源:国知局
遍历数组列表,将在数组列表中最先遍历到的空闲数组块的地址与该消息标识一起记录至索引列表中的空闲索引块。之后执行步骤404。
[0095]步骤404,在数组列表中最先遍历到的空闲数组块内记录该消息请求携带的消息接收端的标识和状态。
[0096]因为消息接收端的标识和状态本身占用的字节并不是很多,一般一个数组块就足以记录,这可在数组列表划分数组块时设置,没有必要像数据块存储消息时那样复杂。
[0097]至此,完成图4所示流程。
[0098]通过图4所示流程的步骤401至步骤404可以看出,本发明在存储消息接收端时,并非按照消息接收端的标识为索引,而是按照消息接收端需要订阅的消息对应的消息标识作为索引,这样能够将订阅同一种消息的消息接收端集中在一起存储,实现消息的高效转发。
[0099]基于图4所示流程,图5具体示出了索引列表和数组列表如何配合完成消息接收端的标识、状态和需要订阅的消息对应的消息标识的存储,具体如图5所示,这里不再赘述。
[0100]需要说明的是,本发明中,中转服务器需要实时检测已发送消息订阅请求的每一消息接收端的状态,当检测出该消息接收端的状态与数组列表记录的该消息接收端的状态不一致,用检测出的该消息接收端的状态更新数组列表中记录的该消息接收端的状态。比如,如图5所示,当中转服务器检测出消息接收端I的状态为异常,而数组列表记录的该消息接收端I的状态为正常,两者不一致,基于此,本发明中,就将数组列表记录的该消息接收端I的状态从正常更新为异常。
[0101]基于图4所示流程,优选地,步骤105中,所述从消息接收端列表中选取消息标识、消息接收端的标识和状态包括:
[0102]识别索引列表中每一索引块记录的消息标识和数组块地址;
[0103]针对识别出的每一数组块地址,从数组列表中找到该数组块地址记录的消息接收端的状态,如果该状态为正常,则选取该数组块地址记录的消息接收端的标识。
[0104]相应地,步骤105中,所述所述将该序列号作为向消息接收端发送的消息的序列号记录至消息接收端列表包括:
[0105]在数组列表中找到记录了该消息接收端标识的数组块;
[0106]在找到的数组块内记录该序列号。
[0107]比如,向消息接收端I发送序列号为10的消息,则将该序列号10记录在数组列表中记录了该消息接收端I的数组块内。
[0108]下面对图6所示流程进行描述:
[0109]参见图6,图6为本发明实施例提供的消息续传实现流程图。如图6所示,该流程可包括以下步骤:
[0110]步骤601,从数组列表中找到记录了该消息接收端标识的数组块。
[0111]步骤602,比较接收的序列号和该找到的数组块记录的最大序列号,如果前者小于后者,则执行步骤603,如果前者大于后者,执行步骤604。
[0112]im,中转服务器转发序列号XXX-YYY的消息到消息接收端的过程中,如果网络出现故障,中转服务器记录了 XXX-YYY中间的某个值,但是消息接收端收到的消息对应的序列号和中转服务器发送给该消息接收端的消息对应的序列号可能不一致,存在一定的不确定性,此时,如果消息接收端发送的序列号小于该找到的数组块所记录的最大序列号,则以消息接收端记录的序列号为准进行消息续传,具体见步骤603,反之,如果消息接收端发送的序列号大于该找到的数组块所记录的最大序列号,则以中转服务器记录的序列号为准进行消息续传,具体见步骤604。
[0113]步骤603,将消息列表中分配了以下序列号的消息发送给该消息接收端:处于所述最大序列号与接收的序列号之间的序列号。
[0114]步骤604,识别该找到的数据块在数组列表中的地址,从索引列表中找到记录了该地址的索引块,识别该找到的索引块记录的消息标识,从消息列表中找到对应该消息标识的消息分配的序列号,选取最大的序列号,将消息列表中分配了以下序列号的消息发送给该消息接收端:处于该选取的最大序列号与接收的序列号之间的序列号。
[0115]至此,完成图6所示流程。
[0116]通过图6所示流程,能够保证消息接收端收到在异常时无法收到的消息,中转服务器实现了消息续传,以应对网络质量不好的情况。
[0117]以上对本发明提供的方法进行了描述,下面对本发明提供的装置进行描述。
[0118]参见图7,图7为本发明实施例提供的装置结构图。作为本发明的一个实施例,该装置应用于处于消息发送端和消息接收端之间的中转服务器,如图7所示,该装置可包括:
[0119]消息接收单元,用于接收消息,并按照序列号递增原则为该消息分配序列号,将该消息、该消息对应的消息标识、以及该消息被分配的序列号保存至消息列表,其中,任意两个消息被分配的序列号不同;
[0120]订阅请求接收单元,用于接收消息订阅请求,所述消息订阅请求携带了发送该消息订阅请求的消息接收端的标识和状态以及该消息接收端需要订阅的消息对应的消息标识;
[0121]第一处理单元,用于将所述消息订阅请求携带的消息标识、消息接收端的标识和状态存储至消息接收端列表中;
[0122]第二处理单元,用于从消息接收端列表中选取消息标识、且状态为正常的消息接收端的标识;
[0123]第三处理单元,用于从消息列表中找到与选取的消息标识对应的消息,依据选取的消息接收端的标识将该消息、以及该消息被分配的序列号一起发送至消息接收端,并将该序列号作为向该消息接收端发送的消息的序列号记录至消息接收端列表;
[0124]续传单元,用于接收消息接收端发送的序列号,依据接收的序列号和消息接收端列表记录的向该消息接收端的标识发送的消息的序列号续传对应的消息至该消息接收端。
[0125]优选地,所述消息列表包括:一级索引列表、二级索引列表和数据列表;所述一级索引列表中包含多个一级索引块,所述二级索引列表中包含多个二级索引块,所述数据列表中包含多个数据块;
[0126]所述消息接收单元将该消息、该消息对应的消息标识、以及该消息被分配的序列号保存至消息列表包括:
[0127]依据消息对应的消息标识识别一级索引列表中是否存在已记录了该消息标识的一级索引块,如果是,从二级索引列表的首个二级索引块开始顺次遍历二级索引列表,将在二级索引列表中最先遍历到的空闲二级索引块的地址记录至该存在的一级索引块,如果否,从二级索引列表的首个二级索引块开始顺次遍历二级索引列表,将在二级索引列表中最先遍历到的空闲二级索引块的地址、与该消息标识一起记录至一级索引列表中的空闲一级索引块;
[0128]从数据列表的首个数据块开始顺次遍历数据列表,将在数据列表中最先遍历到的空闲数据块的地址、以及该消息被分配的序列号记录至在二级索引列表中最先遍历到的空闲二级索引块;
[0129]在数据列表中最先遍历到的空闲数据块记录该消息。
[0130]优选地,所述消息接收单元在数据列表中最先遍历到的空闲数据块记录该消息包括:
[0131]比较该消息的大小与最先遍历到的空闲数据块的大小;
[0132]如果前者小于或等于后者,则在数据列表中最先遍历到的空闲数据块记录该消息;
[0133]如果前者大于后者,则确定记录该消息需要使用的数据块数量N,从所述最先遍历到的空闲数据块开始使用数据列表中N个空闲数据块一起记录该消息;其中,在使用N块数据块记录消息时,每个数据块的尾部需要记录下个数据块的地址。
[0134]优选地,所述第三处理单元从消息列表中找到与选取的消息标识对应的消息包括:
[0135]依据该选取的消息标识从一级索引列表中找到已记录了该消息标识的一级索引块,识别该找到的一级索引块记录的二级索引块地址;
[0136]针对识别出的每一二级索引块地址执行以下步骤:
[0137]从二级索引列表中找到该二级索引块地址记录的数据块地址,
[0138]如果数据列表中该数据块地址未记录其他数据块的地址,则将该数据块地址记录的内容作为与该选取的消息标识对应的消息;
[0139]如果数据列表中该数据块地址记录了其他数据块地址,则,
[0140]将该数据块地址作为首个数据块地址,将首个数据块地址记录的其他数据块地址作为当前数据块,识别当前数据块是否记录了其他数据块地址,
[0141]如果否,将数据列表中从首个数据块地址至当前数据块地址记录的内容组织在一起作为与该选取的消息标识对应的消息,
[0142]如果是,将当前数据块地址记录的其他数据块地址更新为当前数据块地址,返回识别当前数据块地址是否记录了其他数据块地址
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1