一种消息的消费方法、装置及设备
技术领域
本申请涉及计算机技术领域,尤其涉及一种消息的消费方法、装置及设备。
背景技术
在微服务盛行的时代,存在大量消息传递的场景,如服务提供商的服务器对消息消费端进行的单播或广播等,消息消费端对接收到的消息进行消费。在服务提供商的服务器推送的消息中包含有序消息和无序消息;其中,有序消息是指在消息消费端需按照指定顺序进行消费的消息;无序消息即普通消息或无特性的消息,无序消息区别于有特性的有序消息,消息消费端在接收到无序消息时可直接对其进行消费。目前,控制消息消费端按指定顺序对消息进行消费的方法存在延时较高且可靠性较差的问题。
发明内容
本申请实施例提供一种消息的消费方法、装置及设备,用以解决消息消费端按指定顺序对消息进行消费时延时较高且可靠性较差的问题。
本申请实施例提供的一种消息的消费方法,包括:
获取服务器发送的有序消息;
判断所述有序消息的消息类型是否为根消息,得到第一判断结果;
当所述第一判断结果表示所述有序消息的消息类型为根消息时,确定出与所述有序消息相关联的叶消息集合;所述叶消息集合中各个消息的消费优先级均低于所述有序消息的消费优先级;
确定待消费消息集合中各个消息的消费顺序;所述待消费消息集合中包含所述有序消息及所述叶消息集合中的全部消息;
根据所述消费顺序,对所述待消费消息集合中的消息进行消费。
可选地,所述判断所述有序消息的消息类型是否为根消息,得到第一判断结果,具体包括:
判断所述有序消息中父节点序列标识是否为空,当所述有序消息中父节点序列标识为空时,所述第一判断结果表示所述有序消息的消息类型为根消息;当所述有序消息中父节点序列标识不为空时,所述第一判断结果表示所述有序消息的消息类型为叶消息。
可选地,所述确定出与所述有序消息相关联的叶消息集合,具体包括:
确定所述有序消息的消费序列标识;
向存储器发送关于第一消息的查询请求;所述第一消息是包含的父节点序列标识与所述有序消息的消费序列标识相同的消息;
接收所述存储器反馈的第一查询结果;
当所述第一查询结果表示所述存储器中存储有所述第一消息时,将所述第一查询结果对应的第一消息划分至叶消息集合。
可选地,所述将所述第一查询结果对应的第一消息划分至叶消息集合之后,还包括:
确定所述第一消息的消费序列标识;
向所述存储器发送关于第二消息的查询请求;所述第二消息是包含的父节点序列标识与所述第一消息的消费序列标识相同的消息;
接收所述存储器反馈的第二查询结果;
当所述第二查询结果表示所述存储器中存储有所述第二消息时,将所述第二查询结果对应的第二消息划分至所述叶消息集合,并将所述第二查询结果对应的第二消息作为更新后的第一消息,返回步骤确定所述第一消息的消费序列标识。
可选地,所述确定待消费消息集合中各个消息的消费顺序,具体包括:
将第三消息的消费优先级确定为比第四消息的消费优先级高的消费优先级;所述待消费消息集合包含所述第三消息和所述第四消息;所述第四消息是包含的父节点序列标识与所述第三消息的消费序列标识相同的消息;
按消费优先级由高到低的顺序对待消费消息集合中各个消息进行排序,确定所述待消费消息集合中各个消息的消费顺序。
可选地,所述对所述待消费消息集合中的消息进行消费之后,还包括:
判断第五消息是否消费成功,得到第二判断结果;所述第五消息是所述待消费消息集合中的任意一个消息;
当所述第二判断结果表示对所述第五消息消费成功时,将表示对所述第五消息消费成功的消费状态信息存储于存储器。
可选地,所述确定出与所述有序消息相关联的叶消息集合之前,还包括:
获取与所述有序消息相关联的叶消息;
判断是否对所述叶消息的父节点消息消费成功,得到第三判断结果;所述叶消息的父节点消息是包含的消费序列标识与所述叶消息的父节点序列标识相同的消息;
当所述第三判断结果表示未对所述叶消息的父节点消息消费成功时,将所述叶消息和表示所述叶消息未消费成功的消费状态信息存储至存储器。
可选地,所述确定出与所述有序消息相关联的叶消息集合之后,还包括:
确定获取到所述有序消息的时长;
当所述获取到所述有序消息的时长达到预设时长时,删除所述存储器中存储的与待消费消息集合中各个消息对应的消费状态信息;所述待消费消息集合包含所述有序消息及所述叶消息集合中的全部消息。
本申请实施例提供的一种消息的消费装置,包括:
有序消息获取模块,用于获取服务器发送的有序消息;
判断模块,用于判断所述有序消息的消息类型是否为根消息,得到第一判断结果;
叶消息集合确定模块,用于当所述第一判断结果表示所述有序消息的消息类型为根消息时,确定出与所述有序消息相关联的叶消息集合;所述叶消息集合中各个消息的消费优先级均低于所述有序消息的消费优先级;
消费顺序确定模块,用于确定待消费消息集合中各个消息的消费顺序;所述待消费消息集合中包含所述有序消息及所述叶消息集合中的全部消息;
消费模块,用于根据所述消费顺序,对所述待消费消息集合中的消息进行消费。
本申请实施例提供的一种消息的消费设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行所述一种消息的消费方法。
本申请实施例提供的一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现所述一种消息的消费方法的步骤。
本申请实施例提供了一种消息的消费方法、装置及设备,该方法包括:当接收到的有序消息的消息类型为根消息时,确定出与所述有序消息相关联的叶消息集合;确定待消费消息集合中各个消息的消费顺序;所述待消费消息集合中包含所述有序消息及所述叶消息集合中的全部消息;根据所述消费顺序,对所述待消费消息集合中的消息进行消费。通过上述方法,可根据待消费消息集合中各消息的消费顺序,对待消费消息集合中的消息进行消费,提高了消息消费方法的可靠性。服务提供商的服务器无需通过单线程方式将各个消息发送给消息消费端,减少了消息消费端获取各个消息时的等待时间,从而可降低对消息消费时的延时时间。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例一提供的一种消息的消费方法的流程示意图;
图2为本申请实施例二提供的用户间互动消息的消费方法的流程示意图;
图3为本申请实施例二中确定叶消息集合的方法的流程示意图;
图4为本说明书实施例提供的对应于图1中方法的一种消息的消费装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例一提供的一种消息的消费方法的流程示意图,从程序角度而言,流程的执行主体可以为是用于消费消息的应用客户端。图1中的方法,具体可以包括以下步骤:
S101:获取服务器发送的有序消息。
在本说明书实施例中,所述服务器可以是服务提供商用于发送待消费消息的服务器,所述服务器可以采用主动推送的方法向消息消费端(即用于消费消息的应用客户端)推送待消费消息。所述待消费消息包括有序消息和无序消息。所述有序消息意为在消息消费端需按照指定顺序进行消费的消息。所述无序消息意为无需按照指定顺序进行消费的消息。具体的,消息消费端在接收到服务器推送的消息时,可以对消息进行解析,判断接收到的消息是否为有序消息;当判断结果表示接收的消息为有序消息时,执行步骤S102,当判断结果表示接收到的消息为无序消息时,直接对消息进行消费。
S102:判断所述有序消息的消息类型是否为根消息,得到第一判断结果。
在本说明书实施例中,有序消息的消息类型为根消息或叶消息中的任意一种。
S103:当所述第一判断结果表示所述有序消息的消息类型为根消息时,确定出与所述有序消息相关联的叶消息集合;所述叶消息集合中各个消息的消费优先级均低于所述有序消息的消费优先级。
在本说明书实施例中,每个消息对应的消费优先级是一种对各个消息消费顺序的约定,可以对消费优先级高的消息先进行消费,再对消费优先级低的消息进行消费。当所述有序消息的消息类型为根消息时,意为该有序消息的消费优先级最高。当所述有序消息的消息类型为叶消息时,意为存在比该有序消息的消费优先级高的相关联的消息,在对比该有序消息的消费优先级高的相关联的消息消费成功后,才可对该有序消息进行消费。
当所述第一判断结果表示所述有序消息的消息类型为根消息时,所述叶消息集合中可以包含至少一个与所述有序消息相关联的叶消息,所述叶消息集合也可以为空集。具体的,假定在接收到所述有序消息之前,消息消费端未接收到与所述有序消息相关联且消费优先级低于所述有序消息的叶消息,此时确定出的叶消息集合为空集。假定在接收到所述有序消息之前,消息消费端接收到与所述有序消息相关联且消费优先级低于所述有序消息的叶消息,消息消费端可以将所述叶消息存储至消息消费端的存储器中;在接收到所述有序消息后,从存储器中确定出与所述有序消息相关联的叶消息集合。所述存储器可以是消息消费端上用于存储待消费消息及所述待消费消息对应的消费状态信息的存储空间。
S104:确定待消费消息集合中各个消息的消费顺序;所述待消费消息集合中包含所述有序消息及所述叶消息集合中的全部消息。
在本说明书实施例中,可以根据待消费消息集合中各个消息的消费优先级,确定待消费消息集合中各个消息的消费顺序。
S105:根据所述消费顺序,对所述待消费消息集合中的消息进行消费。
在实际应用中,消息消费端可以通过消费者监听器根据所述消费顺序,对待消费消息集合中的消息进行消费。
图1中的方法,可根据待消费消息集合中各消息的消费顺序,对待消费消息集合中的消息进行消费,提高了消息消费方法的可靠性。服务提供商的服务器无需通过单线程方式将各个消息发送给消息消费端,减少了消息消费端获取各个消息时的等待时间,从而可降低对消息消费时的延时时间。
图2为本申请实施例二提供的一种用户间互动消息的消费方法,用以具体说明本申请实施例一提供的一种消息的消费方法在实际中的应用流程。
以下先对本申请实施例二涉及到的互动直播服务提供商的服务器和用户移动终端进行简单介绍。
互动直播服务提供商的服务器可以为用户提供互动直播服务,生成有序消息,并将生成的有序消息推送给用户移动终端;或者,接收第一用户移动终端发出的需推送给第二用户移动终端的信息,根据接收到的信息及预设规则生成有序消息,并将生成的有序消息推送给第二用户移动终端。
用户移动终端可以是对互动直播服务提供商的服务器生成的有序消息进行消费的消息消费端,用户可通过用户移动端进行直播或观看其他用户的直播内容。
如图2所示,一种用户间互动消息的消费方法,具体可以包括以下步骤:
S201:用户A的移动终端获取互动直播服务提供商的服务器发送的有序消息。
在本说明书实施例中,假定,用户A在互动直播服务提供商的直播平台上进行直播,用户B和用户C通过直播平台观看用户A的直播内容。具体的,互动直播服务提供商的服务器向用户A推送确认开始直播的消息1,当用户A对消息1消费后开始直播;用户B加入用户A的直播间观看直播,该服务器向用户A推送用户B进场的消息2;当用户B向用户A赠送虚拟礼物后,该服务器向用户A推送用户B赠送虚拟礼物的消息3;当用户B向用户A发送弹幕后,该服务器向用户A推送用户B发送弹幕的消息4;同理,当用户C加入用户A的直播间时,该服务器向用户A推送用户C进场的消息5;当用户C离开用户A的直播间时,该服务器向用户A推送用户C离场的消息6。在上述具体实施例中,需保证用户A的移动终端对消息1、消息2和消息3按序消费,对消息1、消息2和消息4按序消费,同时对消息1、消息5和消息6按序消费。所述获取互动直播服务提供商的服务器发送的有序消息,意为获取消息1至消息6中的任意一个消息。
在实际应用中,每个消息中可以包含消费序列标识和/或父节点序列标识。用户A的移动终端在获取到互动直播服务提供商的发送的消息时,先对消息进行解析,判断所述消息是否为有序消息。具体的,用户A的移动终端从互动直播服务提供商的服务器处获取消息;对所述消息进行解析;判断所述消息的消费序列标识是否为空,若是,则将所述消息确定为无序消息;若否,则将所述消息确定为有序消息。
当一个消息的消费序列标识不为空时,该消息的消费序列标识具有唯一性。当一个消息的父节点序列标识不为空时,可以认为该消息需在包含的消费序列标识与该消息的父节点序列标识相同的消息消费成功后,才能对该消息进行消费。此时,可以将该消息确定为包含的消费序列标识与该消息的父节点序列标识相同的消息的子消息;将包含的消费序列标识与该消息的父节点序列标识相同的消息确定为该消息的父消息。
本具体实施例中,消息1至消息6中各个消息对应的消费序列标识和父节点序列标识可以如下表所示:
消息名称 |
消息1 |
消息2 |
消息3 |
消息4 |
消息5 |
消息6 |
消费序列标识 |
1 |
2 |
3 |
4 |
5 |
6 |
父节点序列标识 |
|
1 |
2 |
2 |
1 |
5 |
在本说明书实施例中,消息的消费序列标识的内容或父节点序列标识的内容可以为任意字符的组合。例如,数字与字母的组合,数字与各种符号的组合或二进制字符串等。
S202:用户A的移动终端判断所述有序消息的消息类型是否为根消息,得到第一判断结果。
在本说明书实施例中,具体的可以,判断所述有序消息中父节点序列标识是否为空,当所述有序消息中父节点序列标识为空时,所述第一判断结果表示所述有序消息的消息类型为根消息,当所述有序消息中父节点序列标识不为空时,所述第一判断结果表示所述有序消息的消息类型为叶消息。
S203:当所述第一判断结果表示所述有序消息的消息类型为根消息时,用户A的移动终端从存储器中确定出与所述有序消息相关联的叶消息集合;所述叶消息集合中各个消息的消费优先级均低于所述有序消息的消费优先级。
在本说明书实施例中,当所述第一判断结果表示所述有序消息的消息类型为根消息时,即接收到的消息为消息1时,可以立即对消息1进行消费,当消息1消费成功后,将表示对消息1消费成功的消费状态信息存储至存储器,再从存储器中确定出与所述有序消息相关联的叶消息集合。当然,也可以在接收到消息1后,从存储器中确定出与所述有序消息相关联的叶消息集合,后再按消费顺序对消息1进行消费。
假定,用户A的移动终端在接收到所述有序消息前,接收到消息2、消息3、消息4和消息6,需将消息2、消息3、消息4和消息6存储至用户A的移动终端的存储器中。此时,由于存储器中未存储使消息1和消息6建立关联关系的消息(即消息5),因此,确定出的叶消息集合中可以仅包含消息2、消息3和消息4。
在实际应用中,当所述第一判断结果表示所述有序消息的消息类型为叶消息时,可以跳转至步骤S208:判断所述有序消息的父节点消息是否消费成功;步骤S209:当所述有序消息的父节点消息消费成功时,直接对所述有序消息进行消费,并将表示对所述有序消息消费成功的消费状态信息存储至存储器。步骤S210:当所述有序消息的父节点消息消费未消费成功时,则将所述有序消息和表示未对所述有序消息消费成功的消费状态信息存储至存储器。
具体的,判断所述有序消息的父节点消息是否消费成功,具体可以通过判断存储器中是否存储有表示对所述有序消息的父节点消息消费成功的消费状态信息实现。当存储器中存储有表示对所述有序消息的父节点消息消费成功的消费状态信息时,可以认为对所述有序消息的父节点消息消费成功。当存储器中未存储表示所述有序消息的父节点消息的消费状态的消费状态信息时,可以认为消息消费端未接收到所述有序消息的父节点消息,未对所述有序消息的父节点消息消费成功,此时,还可将表示未对所述有序消息的父节点消息消费成功的消费状态信息存储至存储器。当存储器中存储有表示未对所述有序消息的父节点消息的消费成功的消费状态信息时,也可以认为未对所述有序消息的父节点消息消费成功。
例如,假定接收到的有序消息为消息6,需判断消息6的父节点消息(即消息5)是否消息成功,若消息5消费成功,则直接对消息6进行消费;若消息5未消费成功,则将消息6及表示消息6未消费成功的消息存储至存储器。
S204:用户A的移动终端确定待消费消息集合中各个消息的消费顺序;所述待消费消息集合中包含所述有序消息及所述叶消息集合中的全部消息。
在本说明书实施例中,所述确定待消费消息集合中各个消息的消费顺序,具体可以包括:
将第三消息的消费优先级确定为比第四消息的消费优先级高的消费优先级;所述待消费消息集合包含所述第三消息和所述第四消息;所述第四消息是包含的父节点序列标识与所述第三消息的消费序列标识相同的消息。
按消费优先级由高到低的顺序对待消费消息集合中各个消息进行排序,确定所述待消费消息集合中各个消息的消费顺序。
接步骤S202中的具体实施例,由于所述有序消息为消息1,所述叶消息集合中包含消息2、消息3和消息4,此时,所述待消费消息集合中包含消息1、消息2、消息3和消息4。可以将消息1的消费优先级确定为比消息2高的消费优先级,将消息2的消费优先级确定为比消息3和消息4高的消费优先级。由于,消息3和消息4包含的父节点序列标识相同,可以将消息3和消息4的消费优先级确定为相同的消费优先级。按消费优先级由高到低对待消费消息集合中各个消息进行排序,得到的消费顺序为(消息1)>(消息2)>(消息3/消息4)。
S205:用户A的移动终端根据所述消费顺序,对所述待消费消息集合中的消息进行消费。
在实际应用中,将所述待消费消息集合中的任意一个消息确定为第五消息,对所述第五消息进行消费后,还可以包括:判断是否对第五消息消费成功,得到第二判断结果。当所述第二判断结果表示对所述第五消息消费成功时,将表示对所述第五消息消费成功的消费状态信息存储于所述存储器;对第五消息的子消息进行消费。例如,在对消息1消费成功后,将表示对消息1消费成功的消费状态信息存储至存储器;再对消息2进行消费;判断是否对消息2消费成功,循环执行上述步骤。由于消息3和消息4具有相同的消费优先级,用户A的移动终端可以对消息3或消息4同时进行消费,用户A的移动终端也可以随机的对消息3或消息4中的任意一个消费成功后,再对另一个消息进行消费。
S206:用户A的移动终端确定获取到所述有序消息的时长。
在本具体实施例中,可以根据预设周期确定获取到所述有序消息的时长。如每隔2秒中确定一次所述时长。可以在执行步骤S203后执行步骤S206;步骤S206与S204可以同时执行。
S207:当所述获取到所述有序消息的时长达到预设时长时,用户A的移动终端删除所述存储器中存储的与待消费消息集合中各个消息对应的消费状态信息;所述待消费消息集合包含所述有序消息及所述叶消息集合中的全部消息。
图2中方法,可以可根据待消费消息集合中各消息的消费顺序,对待消费消息集合中的消息进行消费,提高了消息消费方法的可靠性。服务提供商的服务器无需通过单线程方式将各个消息发送给消息消费端,减少了消息消费端获取各个消息时的等待时间,从而可降低对消息消费时的延时时间。当获取到所述有序消息的时长达到预设时长时,可以删除所述存储器中存储的与待消费消息集合中各个消息对应的消费状态信息,从而减少占用的存储器的存储空间。
图3为本申请实施例二中确定叶消息集合的方法的流程示意图,如图3所述,该方法具体可以包括:
S301:确定所述有序消息的消费序列标识。
接步骤S203中的实施例,确定消息1的消费消费序列标识,得到消息1的消费消费序列标识为1。
S302:向所述存储器发送关于第一消息的查询请求;所述第一消息是包含的父节点序列标识与所述有序消息的消费序列标识相同的消息。
S303:接收所述存储器反馈的第一查询结果。
S304:当所述第一查询结果表示所述存储器中存储有所述第一消息时,将所述第一查询结果对应的第一消息划分至叶消息集合。
接步骤S203中的实施例,存储器中存储有消息2、消息3、消息4和消息6,所述第一查询结果对应的第一消息为消息2,此时,叶消息集合中包含消息2。
S305:确定所述第一消息的消费序列标识。
在本实施例中,确定消息2的消费消费序列标识,得到消息2的消费消费序列标识为2。
S306:向所述存储器发送关于第二消息的查询请求;所述第二消息是包含的父节点序列标识与所述第一消息的消费序列标识相同的消息。
S307:接收所述存储器反馈的第二查询结果。
S308:当所述第二查询结果表示所述存储器中存储有所述第二消息时,将所述第二查询结果对应的第二消息划分至所述叶消息集合。
在本实施例中,所述第二查询结果对应的第一消息为消息3和消息4,此时,将所述第二查询结果对应的第二消息划分至所述叶消息集合后,叶消息集合中包含消息2、消息3和消息4。
S309:将所述第二查询结果对应的第二消息作为更新后的第一消息,确定所述更新后的第一消息的消费序列标识。
在本实施例中,确定更新后的第一消息的消费序列标识,得到消息3的消费消费序列标识为3,及消息4的消费消费序列标识为4。
S310:向所述存储器发送关于第三消息的查询请求;所述第三消息是包含的父节点序列标识与所述更新后的第一消息的消费序列标识相同的消息。
S311:接收所述存储器反馈的第三查询结果。当所述第三查询结果表示所述存储器中未存储有所述第二消息时,结束流程。
在本实施例中,存储器中未存储包含的父节点序列标识为3或4的消息,因此,跳转至结束。将步骤308中包含消息2、消息3和消息4的叶消息集合确定为所需确定出的叶消息集合。
图3所示的方法,可确定出与实施例一中获取的有序消息相关联的叶消息集合。在实际应用中,当获取到的有序消息的消息类型为根消息时,可以立即对所述有序消息进行消费;再确定出第一消息,对第一消息进行消费后,再确定第二消息,并对第二消息消费后,再判断是否存在第三消息。由于在接收到所述有序消息时,可立即对所述有序消息进行消费;并在确定出第一消息或第二消息后,立即对第一消息或第二消息进行消费,从而可以进一步提高对消息的消费效率,降低对消息消费时的延时时间。
基于同样的思路,本说明书实施例还提供了上述方法对应的装置。图4为本说明书实施例提供的对应于图1中方法的一种消息的消费装置的结构示意图。如图4所示,该装置可以包括:
有序消息获取模块401,用于获取服务器发送的有序消息。
判断模块402,用于判断所述有序消息的消息类型是否为根消息,得到第一判断结果。
叶消息集合确定模块403,用于当所述第一判断结果表示所述有序消息的消息类型为根消息时,确定出与所述有序消息相关联的叶消息集合;所述叶消息集合中各个消息的消费优先级均低于所述有序消息的消费优先级。
消费顺序确定模块404,用于确定待消费消息集合中各个消息的消费顺序;所述待消费消息集合中包含所述有序消息及所述叶消息集合中的全部消息。
消费模块405,用于根据所述消费顺序,对所述待消费消息集合中的消息进行消费。
本说明书实施例还提供了对应于图1的一种消息的消费设备,该设备可以包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述消息的消费方法的实施例,具体功能实现请参见方法实施例中的说明,在此不再赘述。
基于同样的思路,本说明书实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述消息的消费方法的实施例。
需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。