发明内容
本发明实施例提供一种日志生成方法、装置以及一种客户端,以解决现有技术中为了按照服务器需求的日志采集规则生成日志,会耗费较多处理资源的问题。
本发明实施例提供了一种日志生成方法,所述方法包括:
客户端对是否发生客户端事件进行监听;
若监听到发生客户端事件,则向JS日志引擎发送用于描述所述客户端事件的数据,以使得所述JS日志引擎基于所述数据以及服务器提供的日志采集规则生成日志;
其中,实现所述JS日志引擎的JS代码,保存于能够被所述客户端调用的资源包中。
在一实施方式中,向JS日志引擎发送用于描述所述客户端事件的数据,具体包括:
通过所述JS日志引擎的evaluateScript方法调用所述JS日志引擎的接口的方式,向所述JS日志引擎发送用于描述所述客户端事件的数据。
在一实施方式中,所述方法还包括:
所述客户端在启动时,创建一个JS代码执行环境;
在所述JS代码执行环境中注册能够被所述JS日志引擎所调用的方法;
接收所述JS日志引擎通过调用所述方法返回的所述日志。
在一实施方式中,所述日志采集规则,采用下述方式提供给所述JS日志引擎:
所述客户端向所述JS日志引擎发送由客户端从服务器下载的所述日志采集规则。
在一实施方式中,所述客户端向所述JS日志引擎发送由客户端从服务器下载的所述日志采集规则之前,所述方法还包括:
若所述服务器提供的实现所述JS日志引擎的JS代码发生更新,则所述客户端从所述服务器下载实现所述JS日志引擎的更新后的JS代码,以及与所述更新后的JS代码相对应的日志采集规则;则,
所述客户端利用所述更新后的JS代码更新所述资源包中的JS代码;
所述客户端在JS代码执行环境中运行资源包中所述更新后的JS代码后,向基于所述更新后的JS代码所实现的JS日志引擎发送由所述客户端从服务器下载的所述日志采集规则,具体包括:
所述客户端向所述JS日志引擎发送与所述更新后的JS代码相对应的日志采集规则。
本发明实施例还提供了一种日志生成方法,所述方法包括:
JS日志引擎接收客户端在监听到发生客户端事件时发送的用于描述客户端事件的数据;
基于所述数据以及服务器提供的日志采集规则生成日志;
其中,实现所述JS日志引擎的JS代码,保存于能够被所述客户端调用的资源包中。
在一实施方式中,所述方法还包括:所述JS日志引擎接收客户端发送的由客户端从所述服务器下载的日志采集规则;则,
基于所述数据以及服务器提供的日志采集规则生成日志,具体包括:基于所述数据以及客户端发送的所述日志采集规则生成日志。
在一实施方式中,所述日志采集规则中包括事件名称和用于处理事件的JS类的名称的映射关系;则,
基于所述数据以及服务器提供的日志采集规则生成日志,具体包括:
根据所述事件名称,从接收到的用于描述客户端事件的数据中筛选对应于所述事件名称的数据;
根据所述映射关系,调用相应的JS类基于筛选出的数据生成日志。。
在一实施方式中,所述方法还包括:
所述JS日志引擎基于所述数据以及服务器提供的日志采集规则生成日志后,将生成的日志以格式化的字符串的形式,传递给所述客户端。
本发明实施例还提供了一种客户端,包括事件监听模块和数据发送模块,其中:
所述事件监听模块,用于对客户端是否发生客户端事件进行监听;
所述数据发送模块,用于若监听到发生客户端事件,则向JS日志引擎发送用于描述所述客户端事件的数据。
本发明实施例还提供了一种日志生成装置,包括数据接收模块和日志生成模块,其中:
所述数据接收模块,用于接收客户端在监听到发生客户端事件时发送的用于描述客户端事件的数据;
所述日志生成模块,用于基于所述数据以及服务器提供的日志采集规则生成日志。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
采用本申请实施例提供的方案,由于可以由JS日志引擎根据客户端发送的用于描述客户端事件的数据,以及服务器提供的日志采集规则生成日志,并且,实现所述JS日志引擎的JS代码保存于能够被所述客户端调用的资源包中,因此,当日志采集规则发生变化时,只需对JS日志引擎进行对应的更新,而不需对整个客户端进行更新,大大节省了处理资源,更为灵活、简单。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
如上所述,日志的作用之一是统计用户使用习惯,分析客户端问题等等,客户端的发展方向依赖于对于日志数据分析反馈的结果。目前,服务器对于客户端日志的收集过程一般为:客户端运行过程中发生客户端事件并生成对应用于描述客户端事件的数据,客户端中日志模块处理所述客户端事件对应描述数据以生成日志,随后,客户端再将生成的日志发送给服务器以实现客户端日志的收集。由于客户端中的日志模块属于客户端源代码的一部分,如果服务器对于客户端的日志需求发生变化,使得日志采集规则发生变化时,则需要对客户端的源代码进行修改以实现客户端日志采集规则的更新,进一步地,发布更新后的客户端版本并由用户下载使用后,才能获得符合日志采集规则的日志。所述过程较为复杂,需要编译并发布新版本客户端,会耗费较多的处理资源。
为解决上述技术问题,本申请实施例1提供了一种日志生成方法。利用JS代码动态加载的能力,当日志采集规则发生变化时,无需对整个客户端进行更新,只需将JS日志引擎进行对应的更新,即可生成获得符合日志采集规则的日志。
如图1所示,该方法包括下述步骤:
步骤S11:客户端对是否发生客户端事件进行监听,若监听到发生客户端事件,则向JS日志引擎发送用于描述所述客户端事件的数据。
所述客户端,是指可以在手机、电脑、智能电视等终端运行的软件,一般需要与服务器相互配合运行。
所述客户端事件,可以是指任意的客户端事件,比如点击事件、客户端运行错误事件,等等。
当客户端运行时,用户可以通过各种操作触发客户端事件,例如,点击客户端界面的某处会触发产生诸如点击事件等,或滑动客户端界面会触发产生诸如滑动事件等。
一般来说,客户端在响应这些操作的地方都会添加埋点代码。用户的各种操作会触发客户端运行相应的埋点代码,进而生成用于描述客户端事件的数据。
例如,当用户点击某个视频进行播放时,此时即会触发客户端事件——具体而言是视频播放事件,从而会生成一系列用于描述该视频播放事件的数据,如视频名称、视频总播放时长等等。
当客户端监听到发生客户端事件后,向JS日志引擎发送用于描述客户端事件的数据。
本申请实施例中,在一种实施方式中,向JS日志引擎发送用于描述所述客户端事件的数据,具体包括:
通过所述JS日志引擎的evaluateScript方法调用所述JS日志引擎的接口的方式,向JS日志引擎发送用于描述所述客户端事件的数据。
本申请实施例中,JS日志引擎可以通过export方法,对外暴露JS日志引擎的接口,进一步,客户端可以通过JS日志引擎的evaluateScript方法调用所述暴露的接口,以实现数据从客户端到JS日志引擎方向的传递。
其中,客户端将用于描述客户端事件的数据发送给JS日志引擎,可以预设时间周期,周期性地向JS日志引擎发送数据,例如每5秒发送一次,每10秒发送一次,这里并不做限定,此时发送的数据可以包括所述周期内发生的客户端事件对应的数据;当然,也可以是实时向JS日志引擎发送数据,即一旦发生客户端事件,就实时向JS日志引擎发送用于描述所述客户端事件的数据。
需要说明的是,实现所述JS日志引擎的JS代码,保存于能够被客户端调用的资源包中。
本申请实施例中,所述日志引擎可以在客户端编译阶段集成到客户端中,也可以在客户端运行阶段从服务器拉取,只要能实现客户端对其的调用即可。
步骤S12:JS日志引擎接收客户端在监听到发生客户端事件时发送的用于描述客户端事件的数据,并基于所述数据以及服务器提供的日志采集规则生成日志。
在JS日志引擎接收客户端发送的用于描述客户端事件的数据后,将所述数据与服务器提供的日志采集规则进行匹配,以此确定出需要生成日志的客户端事件,进一步地,再基于JS日志引擎的处理逻辑将符合日志采集规则的所述数据生成所需日志。
本申请实施例中,所述日志采集规则,代表了服务器对于客户端日志的需求,可以是一个容器,该容器中包含若干规则(即日志采集规则),每一条规则包含规则标识、事件名称和/或事件处理类等信息。
本申请实施例中,服务器的日志采集规则可以有多种方式提供给JS日志引擎,例如,可以是服务器直接发送给JS日志引擎,也可以是通过客户端间接发送给JS日志引擎,一种优选地方案为:
客户端从服务器下载日志采集规则,而后由客户端向JS日志引擎发送下载的所述日志采集规则。
即客户端从服务器下载日志规则后,通过JS日志引擎暴露的接口,将所述日志规则传递给JS日志引擎;通过由客户端将日志规则转发给JS日志引擎的方式,可以不必设置JS日志引擎与服务器交互的功能,直接利用现有的客户端与服务器交互的功能,使得JS日志引擎对应的资源包容量较小,调用或者更新都较为方便。
本申请实施例中,在一种实施方式中,客户端向所述JS日志引擎发送由客户端从服务器下载的所述日志采集规则之前,所述方法还包括:
若服务器提供的实现所述JS日志引擎的JS代码发生更新,则所述客户端从服务器下载实现所述JS日志引擎的更新后的JS代码,以及与所述更新后的JS代码相对应的日志采集规则;则,
客户端向所述JS日志引擎发送由客户端从服务器下载的所述日志采集规则,具体包括:
所述客户端利用所述更新后的JS代码更新所述资源包中的JS代码;
所述客户端在JS代码执行环境中运行资源包中所述更新后的JS代码后,向基于所述更新后的JS代码所实现的JS日志引擎发送与所述更新后的JS代码相对应的日志采集规则。
本申请实施例中,当服务器提供的实现所述JS日志引擎的JS代码发生更新时,说明服务器对于客户端的日志需求发生了变化,通过下载更新后的JS代码,并利用更新后的JS代码对所述资源包中的JS代码进行更新,可以实现当前JS日志引擎处理逻辑的更新,客户端再将与所述更新后的JS代码相对应的日志采集规则传递给JS日志引擎,JS日志引擎即可根据新的处理逻辑以及新的日志采集规则,将所述用于描述客户端事件的数据生成服务器所需的日志。
其中,与所述更新后的JS代码相对应的日志采集规则用于从各种客户端事件中筛选出需要生成日志的客户端事件,例如,原有的需要生成相应日志的客户端事件为客户端事件A、客户端事件B以及客户端事件C,当前服务器对客户端的日志需求变为采集客户端事件A、客户端事件B以及客户端事件D生成的日志,此时所述JS日志引擎不存在处理客户端事件D的逻辑,也没有能将客户端事件D从各种客户端事件中筛选出来的日志采集规则,此时,通过下载更新后具有处理客户端事件D功能的JS代码,并利用所述更新后的JS代码对所述资源包中的JS代码进行更新,可以使当前JS日志引擎具备处理客户端事件D的逻辑,客户端再将能将客户端事件D从各种客户端事件中筛选出来的日志采集规则传递给JS日志引擎,JS日志引擎即可根据客户端事件D处理逻辑以及用于描述客户端事件D的数据,生成服务器所需的日志。其中,此处所述的处理客户端事件D,至少包括基于用于描述客户端事件D的数据生成相应的日志。
本申请实施例中,当服务器对于客户端的日志需求发生变化,导致日志采集规则发生变化时,可以由技术人员在服务器对实现JS日志引擎的JS代码按照新逻辑进行修改和验证,从而达到实现所述JS日志引擎的JS代码的更新。
本申请实施例中,在一种实施方式中,所述日志采集规则中包括:用于生成日志的客户端事件的事件名称和基于数据生成日志的JS类的名称的映射关系;则,
基于所述数据以及服务器提供的日志采集规则生成日志,具体包括:
根据所述事件名称,从接收到的用于描述客户端事件的数据中筛选对应于所述事件名称的数据;
根据所述映射关系,调用相应的JS类基于筛选出的数据生成日志。
本申请实施例中,所述从接收到的用于描述客户端事件的数据中筛选对应于所述事件名称的数据,即,将用于描述客户端事件的数据与日志采集规则中用于生成日志的客户端事件的事件名称进行匹配,若匹配,则确定所述客户端事件需要生成对应的日志,若不匹配,则忽略所述客户端事件,例如,日志采集规则中的事件名称为“视频A”,客户端事件a、客户端事件b以及客户端事件c对应的用于描述所述客户端事件的数据中的事件名称分别为“视频A”、“视频B”、以及“视频C”,此时客户端事件a的描述数据中的事件名称“视频A”就与日志采集规则中的视频名称相匹配,客户端事件b以及客户端事件c不匹配,从而可以确定客户端事件a需要生成对应的日志,同时忽略客户端事件b以及客户端事件c。在实际情况中,也可以在日志采集规则中设置多项比对条件,可以对事件名称、事件触发时间等同时进行匹配,以精准确定出需要生成日志的客户端事件。
本申请实施例中,将用于描述客户端事件的数据与日志采集规则中的事件名称进行匹配,若匹配,则确定所述客户端事件需要生成对应的日志,进一步地,根据日志采集规则中的事件处理类,将所述需要生成日志的客户端事件分派到对应JS类中,所述JS类基于用于描述所述匹配的客户端事件的数据,生成所需日志,如针对某匹配的视频播放事件,JS类可以从用于描述此视频播放事件的数据中取出视频的标识符,视频总播放时长,视频标题等信息,基于这些信息生成此视频播放事件对应的日志。
本申请实施例中,在一种实施方式中,所述方法还包括:
JS日志引擎基于所述数据以及服务器提供的日志采集规则生成日志后,将生成的日志以格式化的字符串的形式,传递给所述客户端。
本申请实施例中,在JS日志引擎生成日志后,可以将所述日志传递给服务器,以便完成服务器所需日志的采集。JS日志引擎将日志传递给服务器,方式可以有多种,可以由JS日志引擎直接传递给服务器,也可以间接传递给服务器,一种优选的方案是利用客户端现有的与服务器交互的功能,先将日志以格式化的字符串的形式传递所述客户端,再由客户端传递给服务器。
本申请实施例中,在一种实施方式中,所述方法还包括:
所述客户端在启动时,创建一个JS代码执行环境;
在所述JS代码执行环境中注册能够被所述JS日志引擎所调用的方法;
接收所述JS日志引擎通过调用所述方法返回的所述日志。
本申请实施例中,客户端通过创建一个JS代码执行环境,并在所述JS代码执行环境中注册能够被所述JS日志引擎所调用的方法,即暴露客户端接口,以实现数据从JS日志引擎至客户端方向的传递。
采用本申请实施例提供的方案,由于可以由JS日志引擎根据客户端发送的用于描述客户端事件的数据,以及服务器提供的日志采集规则生成日志,并且,实现所述JS日志引擎的JS代码保存于能够被所述客户端调用的资源包中,因此,当日志采集规则发生变化时,只需对JS日志引擎进行对应的更新,而不需对整个客户端进行更新,大大节省了处理资源,更为灵活、简单。
实施例2
为解决现有技术为了按照服务器需求的日志采集规则生成日志,会耗费较多处理资源的问题。本申请实施例2提供了一种日志生成方法的具体实施案例之一,如图2所示,具体如下:
当服务器对客户端日志需求发生变化,导致日志采集规则发生变化时,在服务器对实现JS日志引擎的JS代码按照新逻辑进行修改和验证,并将逻辑正确的JS代码以及相对应的日志采集规则上传。
此时,客户端监控到服务器提供的实现所述JS日志引擎的JS代码发生更新,则从服务器下载实现所述JS日志引擎的更新后的JS代码,以完成JS日志引擎的更新,同时从服务器下载与所述更新后的JS代码相对应的日志采集规则,并将所述日志采集规则发送给更新后的JS日志引擎,更新后的JS日志引擎根据新的处理逻辑以及新的日志采集规则,利用所述用于描述客户端事件的数据生成服务器所需的日志。
采用本申请实施例提供的方案,当服务器对于客户端的日志需求发生变化时,只需要在服务器对JS代码进行修改,并下发,实现JS日志引擎的动态更新,更新后的JS日志引擎就能根据更新的JS代码对应的日志采集规则生成服务器所需日志,无需编译并发布新的客户端版本,极大地节约了处理资源,使得当日志采集规则发生变化时,相应的日志采集变的更为灵活、简单。
实施例3
为解决现有技术为了按照服务器需求的日志采集规则生成日志,会耗费较多处理资源的问题。本申请实施例3提供了一种日志生成方式具体实施场景之一,具体如下:
场景为客户端页面中“收藏”、“历史”点击对应的日志收集。
原有的服务器对客户端日志的需求为点击“收藏”日志的收集或点击“历史”日志的收集,即点击“收藏”为一个需要生成日志的客户端事件,点击“历史”为另一个需要生成日志的客户端事件,两者为相互独立的日志。
当前,服务器的新需求为,点击“历史”后再点击“收藏”为一个客户端事件,由于当前JS日志引擎没有“点击历史然后点击收藏”的逻辑,所以在服务器对实现JS日志引擎的JS代码逻辑进行修改,并下发更新的JS代码以及对应的日志采集规则,JS日志引擎进行对应的更新,以实现“点击历史然后点击收藏”客户端事件对应日志采集的功能。
采用本申请实施例提供的方案,当服务器对于客户端的日志需求发生变化时,只需要在服务器对JS代码进行修改,并下发更新的JS代码以及对应的日志采集规则,实现JS日志引擎的动态更新,更新后的JS日志引擎就能根据更新的JS代码对应的日志采集规则生成服务器所需日志,无需编译并发布新的客户端版本,极大地节约了处理资源,使得当日志采集规则发生变化时,相应的日志采集变的更为灵活、简单。
实施例4
为解决现有技术中为了按照服务器需求的日志采集规则生成日志,会耗费较多处理资源的问题,基于与本申请实施例1相同的发明构思,本申请实施例4提供了一种客户端40,以及一种日志生成装置50。对于该实施例4中的客户端40以及日志生成装置50若有不清楚之处,可以参考实施例1中的相应内容。如图3所示,所述客户端40具体包括:事件监听模块401以及数据发送模块402,其中:
事件监听模块401,用于对客户端是否发生客户端事件进行监听;
数据发送模块402,用于若监听到发生客户端事件,则向JS日志引擎发送用于描述所述客户端事件的数据。
由于该装置40采用与本申请实施例1相同的发明构思,因此也能够解决现有技术中的问题,这里就不再赘述。
在本申请实施例中,在一种实施方式中,在事件监听模块401监听到发生客户端事件后,数据发送模块402向JS日志引擎发送用于描述所述客户端事件的数据,具体包括:
通过所述JS日志引擎的evaluateScript方法调用所述JS日志引擎的接口的方式,向所述JS日志引擎发送用于描述所述客户端事件的数据。
在本申请实施例中,在一种实施方式中,所述客户端40还包括JS代码执行环境创建模块、注册模块以及日志接收模块,其中:
JS代码执行环境创建模块,用于在客户端启动时,创建一个JS代码执行环境;
注册模块,用于在所述JS代码执行环境中注册能够被所述JS日志引擎所调用的方法;
日志接收模块,用于接收所述JS日志引擎通过调用所述方法返回的所述日志。
在本申请实施例中,在一种实施方式中,客户端40还包括下载模块以及日志采集规则发送模块,其中:
所述下载模块,用于从服务器下载所述日志规则;
所述日志采集规则发送模块,用于向所述JS日志引擎发送由下载模块从所述服务器下载的所述日志采集规则。
在本申请实施例中,在一种实施方式中,客户端40还包括监控模块以及JS代码更新模块,其中:
所述监控模块,用于在所述日志采集规则发送模块向所述JS日志引擎发送由下载模块从所述服务器下载的所述日志采集规则之前,监控所述服务器提供的实现所述JS日志引擎的JS代码是否发生更新,若更新,则所述下载模块从服务器下载实现所述JS日志引擎的更新后的JS代码,以及与所述更新后的JS代码相对应的日志采集规则;
所述JS代码更新模块,用于利用所述更新后的JS代码更新所述资源包中的JS代码;则,
当客户端40还包括上述监控模块以及JS代码更新模块时,所述日志规则发送模块,具体可以用于:在JS代码执行环境中运行资源包中所述更新后的JS代码后,向基于所述更新后的JS代码所实现的JS日志引擎发送与所述更新后的JS代码相对应的日志采集规则。
一种日志生成装置50,如图4所示,所述装置50具体包括:数据接收模块501和日志生成模块502,其中:
数据接收模块501,用于接收客户端在监听到发生客户端事件时发送的用于描述客户端事件的数据;
日志生成模块502,用于基于所述数据以及服务器提供的日志采集规则生成日志。
由于该装置50采用与本申请实施例1相同的发明构思,因此也能够解决现有技术中的问题,这里就不再赘述。
在本申请实施例中,在一种实施方式中,所述装置50还包括日志采集规则接收模块,用于接收客户端发送的由客户端从服务器下载的日志采集规则。
当所述装置50还包括日志采集规则接收模块时,日志生成模块502具体可以用于:基于所述数据以及日志采集规则接收模块接收的所述日志采集规则生成日志。
在本申请实施例中,在一种实施方式中,所述日志采集规则中包括:用于生成日志的客户端事件的事件名称和基于数据生成日志的JS类的名称的映射关系;则,
日志生成模块502,具体可以用于:
根据所述事件名称,从接收到的用于描述客户端事件的数据中筛选对应于所述事件名称的数据;
根据所述映射关系,调用相应的JS类基于筛选出的数据生成日志。
在本申请实施例中,在一种实施方式中,所述装置50还包括日志传递模块,用于在日志生成模块502基于所述数据以及服务器提供的日志采集规则生成日志后,将生成的日志以格式化的字符串的形式,传递给所述客户端。
采用本申请实施例提供的客户端40和日志生成装置50,由于可以由JS日志引擎根据客户端发送的用于描述客户端事件的数据,以及服务器提供的日志采集规则生成日志,并且,实现所述JS日志引擎的JS代码保存于能够被所述客户端调用的资源包中,因此,当日志采集规则发生变化时,只需对JS日志引擎进行对应的更新,而不需对整个客户端进行更新,大大节省了处理资源,更为灵活、简单。
需要说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
另外,本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行图1所示实施例中数据存储装置执行的方法,并具体用于执行:
客户端对是否发生客户端事件进行监听,若监听到发生客户端事件,则向JS日志引擎发送用于描述所述客户端事件的数据;
JS日志引擎接收在监听到发生客户端事件时客户端发送的用于描述客户端事件的数据,并基于所述数据以及服务器提供的日志采集规则生成日志。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。