实施例2
多媒体权限资讯至少包括用户在多媒体服务器中拥有的多媒体权限。当用户开通多媒体权限时,多媒体服务器为用户分配用户在多媒体服务器中的多媒体资源数值;根据用户的多媒体资源数值确定用户的权限等级,根据用户的权限等级确定用户的多媒体权限资讯。
图2-1是用户多媒体权限的开通方法流程图;其中,该方法包括:
步骤201:终端在终端的显示界面中设置开通多媒体权限的开通入口,通过该开通入口发送权限开通请求消息给多媒体服务器,该权限开通请求消息携带用户的用户标识;
终端在终端的显示界面中设置开通多媒体权限的开通入口,当用户想要开通多媒体权限时,用户通过该开通入口提交开通命令给终端;终端根据用户提交的开通命令发送开通权限请求消息给多媒体服务器,该开通权限请求消息携带用户的用户标识。
终端的显示界面可以为终端的多媒体应用的任一显示界面,例如,多媒体应用的首页、播放多媒体信息的界面或者下载多媒体信息的界面等。多媒体服务器可以为音乐服务器等;用户的用户标识可以为用户在多媒体服务器中注册的用户账户或者用户的名称等;终端可以为手机、平板电脑或者PC(personalcomputer,个人计算机)终端等。参见图2-2,终端在多媒体应用的首页设置开通多媒体权限的开通入口。
例如,用户的用户标识为张三,当张三想要开通多媒体权限时,终端通过该开通入口发送开通权限请求消息给多媒体服务器,该开通权限请求消息携带用户的用户标识:张三。
步骤202:多媒体服务器接收终端发送的权限开通请求消息,为该用户分配多媒体资源数值;
多媒体服务器从权限开通请求消息中获取用户的用户标识,为该用户分配多媒体资源数值。且多媒体服务器为每个开通多媒体权限的用户分配的多媒体资源数值都相同。
例如,多媒体服务器为张三分配的多媒体资源数值为10等。
步骤203:终端在终端的显示界面中设置加速多媒体资源数值的加速入口,通过该加速入口发送加速请求消息给多媒体服务器,该加速请求消息携带用户的开通方式;
终端在终端的显示界面中设置加速多媒体资源数值的加速入口,当用户想要加速增长用户的多媒体资源数值时,用户通过该加速入口提交加速命令给终端;终端获取用户开通加速多媒体资源数值的开通方式,根据用户提交的加速命令发送加速请求消息给多媒体服务器,该加速请求消息携带用户的开通方式。
开通方式可以为终端直接开通且开通时长为第一时长、通过第三方应用开通且开通时长第一时长、直接开通且开通时长为第二时长或者通过第三方应用开通且开通时长为第二时长等。
第一时长可以为一个月,第二时长可以为一年等,在本发明实施例中对第一时长和第二时长不作具体限定。
步骤204:多媒体服务器接收终端发送的加速请求消息,根据用户的开通方式获取用户的资源数值变化规则;
多媒体服务器中事先存储有开通方式和资源数值变化规则的对应关系,根据用户的开通方式,从开通方式和资源数值变化规则的对应关系中获取用户的资源数值变化规则。
例如,多媒体服务器中存储的开通方式和资源数值变化规则的对应关系如下表1所示:
表1
步骤205:多媒体服务器周期性根据用户的资源数值变化规则,更新用户的多媒体资源数值;
具体地,多媒体服务器每隔预设时长根据用户的资源数值变化规则,更新一次用户的多媒体资源数值。
预设时长可以根据需要进行设置并更改;例如,预设时长为1天,张三的资源数值变化规则为每天增加15,则多媒体服务器每隔一天,将张三的多媒体资源数值增加15。
需要说明的是,用户的多媒体权限具有一定的期限,当用户的多媒体期限到达时,用户的资源数值变化规则将会发生变化。
例如,当用户的多媒体期限为2014-11-4至2014-12-4,在2014-11-4至2014-12-4期间,用户的资源数值变化规则为每天增加15;2014-12-4之后,用户的资源数值变化规则将变为每天减5,直到多媒体资源数值变为0为止。
需要说明的是,用户听歌或者参见多媒体服务器提供的活动还可以增加用户的多媒体资源数值。
步骤206:多媒体服务器将用户的用户标识和用户的多媒体资源数值存储在用户标识和多媒体资源数值的对应关系中;
多媒体服务器将用户的用户标识和用户的多媒体资源数值存储在用户标识和多媒体资源数值的对应关系中,从而可以根据用户的用户标识,从用户标识和多媒体资源数值的对应关系中获取用户的多媒体资源数值。
步骤207:多媒体服务器根据用户的多媒体资源数值,确定用户在多媒体服务器中的权限等级;
多媒体服务器事先确定多媒体资源数值范围和权限等级的对应关系。则步骤205具体为:
多媒体服务器根据用户的多媒体资源数值,确定用户的多媒体资源数值所在的多媒体资源数值范围,根据用户的多媒体资源数值所在的多媒体资源数值范围,从多媒体资源数值范围和权限等级的对应关系中获取用户在多媒体服务器中的权限等级。
例如,权限等级分为LV1至LV8,多媒体服务器中存储的多媒体资源数值范围和权限等级的对应关系如下表2所示:
表2
步骤208:多媒体服务器将用户的用户标识和用户在多媒体服务器中的权限等级存储在用户标识和权限等级的对应关系中。
多媒体服务器将用户的用户标识和用户在多媒体服务器中的权限等级存储在用户标识和权限等级的对应关系中,从而可以根据用户的用户标识,从用户标识和权限等级的对应关系中获取用户在多媒体服务器中的权限等级。
图2-3本发明实施例提供的用户多媒体权限资讯的获取方法流程图,其中,该方法包括:
步骤301:终端向多媒体服务器发送权限获取请求消息,该权限获取请求消息携带用户的用户标识;
当用户登录多媒体服务器时,终端获取用户的用户标识,然后向多媒体服务器发送权限获取请求消息以请求获取用户的多媒体权限资讯,该权限获取请求消息携带用户的用户标识。
例如,当张三登录音乐服务器时,手机向音乐服务器发送权限获取请求消息,该权限获取请求消息携带用户的用户标识:张三。
步骤302:多媒体服务器接收终端发送的权限获取请求消息,根据用户的用户标识,获取用户在多媒体服务器中的权限等级;
多媒体服务器根据用户的用户标识,获取用户在多媒体服务器中的权限等级的步骤可以通过以下第一种方式或者第二种方式实现,当多媒体服务器中存储用户标识和权限等级的对应关系,可以通过第一种方式实现;当多媒体服务器中存储用户标识和多媒体资源数值的对应关系时,可以通过第二种方式实现。
对于第一种实现方式,多媒体服务器根据用户的用户标识,获取用户在多媒体服务器中的权限等级的步骤可以为:多媒体服务器根据用户的用户标识,从用户标识和权限等级的对应关系中获取用户在多媒体服务器中的权限等级。
对于第二种实现方式,多媒体服务器根据用户的用户标识,获取用户在多媒体服务器中的权限等级的步骤可以为:多媒体服务器根据用户的用户标识,从用户标识和多媒体资源数值的对应关系中获取用户在多媒体服务器中的多媒体资源数值,根据用户在多媒体服务器中的多媒体资源数值确定用户的多媒体资源数值所在的多媒体资源数值范围,根据用户的多媒体资源数值所在的多媒体资源数值范围,从多媒体资源数值范围和权限等级的对应关系中获取用户的多媒体资源数值对应的权限等级。
步骤303:多媒体服务器根据用户在多媒体服务器中的权限等级,获取用户的多媒体权限资讯;
其中,多媒体权限资讯至少包括用户在多媒体服务器中拥有的多媒体权限;多媒体权限资讯还可以包括用户在多媒体服务器中的权限等级和/或到期时间等信息。参见如下表3所示:
表3
其中,多媒体服务器中事先存储权限等级和多媒体权限资讯的对应关系,相应的,步骤303可以为:多媒体服务器根据用户在多媒体服务器中的权限等级,从权限等级和多媒体权限资讯的对应关系中获取用户的多媒体权限资讯。
其中,用户的多媒体权限资讯包括音乐权限资讯、演唱会权限资讯、游戏权限资讯、身份权限资讯等。相应的,多媒体服务器中存储的权限等级与多媒体信息的对应关系可以为权限等级与音乐权限资讯的对应关系、权限等级与演唱会权限资讯的对应关系、权限等级与游戏权限资讯的对应关系,以及权限等级与身份权限资讯的对应关系。
音乐权限资讯是指用户在多媒体服务器中享受的音乐方面的权限。例如,多媒体服务器中存储的权限等级与音乐权限资讯的对应关系存储如下表4所示:
表4
演唱会权限资讯是指用户在服务器中观看的演唱会方面的权限。例如,多媒体服务器中存储的权限等级与演唱会权限资讯的对应关系如下表5所示:
表5
游戏权限资讯是指用户在多媒体服务器中享受的在玩游戏方面的权限。例如,多媒体服务器中存储的权限等级和游戏权限资讯的对应关系如下表6所示:
表6
身份权限资讯是指用户在多媒体服务器中享受的身份方面的权限。例如,多媒体服务器中存储的权限等级与身份权限资讯的对应关系如下表7所示:
表7
当多媒体服务器获取用户的多媒体权限资讯之后,为了方便用户和用户的联系人的多媒体权限资讯做对比,多媒体服务器还可以获取用户的联系人的多媒体权限资讯。
步骤304:多媒体服务器根据用户的用户标识,获取用户的联系人的多媒体权限资讯;
步骤304可以通过以下步骤(1)和(2)实现,包括:
(1):多媒体服务器根据用户的用户标识,获取用户的联系人列表;
多媒体服务器中事先存储用户标识和联系人列表的对应关系,相应的,步骤(1)可以为:根据用户的用户标识,从用户标识和联系人列表的对应关系中获取用户的联系人列表。
例如,用户的用户标识为张三,根据用户的用户标识:张三,获取用户的联系人列表如下表8所示:
表8
(2):多媒体服务器根据联系人列表中包括的每个联系人的用户标识,分别获取每个联系人的多媒体权限资讯。
步骤(2)可以通过以下步骤(2-1)至(2-2)实现,包括:
(2-1):多媒体服务器根据联系人列表中包括的每个联系人的用户标识,分别获取每个联系人在多媒体服务器中的权限等级;
步骤(2-1)可以通过以下第一种方式或者第二种方式实现,对于第一种方式,步骤(2-1)可以为:
多媒体服务器根据联系人列表中包括的每个联系人的用户标识,从用户标识和权限等级的对应关系中获取每个联系人在多媒体服务器中的权限等级。
对于第二种方式,步骤(2-1)可以为:
多媒体服务器根据每个联系人的用户标识,从用户标识和多媒体资源数值的对应关系中分别获取每个联系人在多媒体服务器中的多媒体资源数值;分别确定每个联系人的多媒体资源数值对应的权限等级。
(2-2):多媒体服务器根据每个联系人在多媒体服务器中的权限等级,分别获取每个联系人的多媒体权限资讯。
具体地,多媒体服务器根据每个联系人在多媒体服务器中的权限等级,从权限等级和多媒体权限资讯的对应关系中分别获取每个联系人的多媒体权限资讯。
进一步地,多媒体服务器还可以通过以下步骤(A)至(B)获取用户和每个联系人的多媒体资源数值,包括:
(A):多媒体服务器根据用户的用户标识和每个联系人的用户标识,分别获取用户的多媒体资源数值和每个联系人的多媒体资源数值并组成第一资源数值列表;
具体地,多媒体服务器根据用户的用户标识,从用户标识和多媒体资源数值的对应关系中获取用户的多媒体资源数值,以及根据每个联系人的用户标识,从用户标识和多媒体资源数值的对应关系中分别获取每个联系人的多媒体资源数值,将用户的多媒体资源数值和每个联系人的多媒体资源数值组成第一资源数值列表。
例如,张三的多媒体资源数值为65971,李四的多媒体资源数值为66091、王五的多媒体资源数值为69295、赵六的多媒体资源数值为68802等。多媒体服务器将张三的多媒体资源数值和张三的联系人:李四、王五以及赵六的资源数值组成第一资源数值列表如下表9所示:
表9
用户标识 |
多媒体资源数值 |
张三 |
65971 |
李四 |
66091 |
王五 |
69295 |
赵六 |
68802 |
(B):多媒体服务器对第一资源数值列表中的多媒体资源数值进行排序得到第二资源数值列表。
具体地,多媒体服务器对第一资源数值列表中的多媒体资源数值按照多媒体资源数值由大到小的顺序进行排序得到第二资源数值列表;或者,多媒体服务器对第一资源数值列表中的多媒体资源数值按照多媒体资源数值由小到大的舒血宁进行排序得到第二资源数值列表。
例如,多媒体服务器对第一资源数值列表中的多媒体资源数值按照多媒体资源数值由大到小的顺序进行排序得到第二资源数值列表,如下表10所示:
表10
用户标识 |
多媒体资源数值 |
王五 |
69295 |
赵六 |
68802 |
李四 |
66091 |
张三 |
65971 |
进一步地,多媒体服务器向终端发送第二资源数值列表;终端接收多媒体服务器发送的第二资源数值列表,显示第二资源数值列表。
步骤305:多媒体服务器向终端发送用户的多媒体权限资讯和用户的联系人的多媒体权限资讯;
进一步地,多媒体服务器向终端用户的多媒体资源数值和用户的联系人的多媒体资源数值,也即多媒体服务器向终端发送第二资源数值列表。
步骤306:终端接收多媒体服务器发送的用户的多媒体权限资讯和用户的联系人的多媒体权限资讯,显示用户的多媒体权限资讯和用户的联系人的多媒体权限资讯;
终端显示用户的多媒体权限资讯和用户的联系人的多媒体权限资讯,从而用户可以将自己的多媒体权限资讯和用户的联系人的多媒体权限资讯做对比。
进一步地,终端接收多媒体服务器发送的第二资源数值列表,显示第二资源数值列表,从而用户可以将自己的多媒体资源数值和用户的联系人的多媒体资源数值做对比。
步骤307:终端向多媒体服务器发送多媒体获取请求消息,该多媒体获取请求消息携带用户的多媒体权限资讯和多媒体信息的多媒体标识;
当用户想要播放某个多媒体信息时,终端获取用户的多媒体权限资讯和多媒体信息的多媒体标识,向多媒体服务器发送多媒体获取请求消息,该多媒体获取请求消息携带用户的多媒体权限资讯和多媒体信息的多媒体标识。
多媒体信息的多媒体标识可以为多媒体信息的名称或者多媒体信息的URL(Uniform Resoure Locator:统一资源***)等。
步骤308:多媒体服务器接收终端发送的多媒体获取请求消息,确定用户是否能够播放该多媒体信息,如果用户能够播放该多媒体信息,执行步骤309;
多媒体服务器确定用户是否能够播放该多媒体信息的步骤可以通过以下步骤(1)至(2)实现,包括:
(1):多媒体服务器根据该多媒体信息的多媒体标识,获取播放该多媒体信息所需要的多媒体权限;
当多媒体服务器接收到运营商在多媒体服务器中投放的每个多媒体信息时,为每个多媒体信息分配所需要的多媒体权限,将每个多媒体信息的多媒体标识和播放每个多媒体信息所需要的多媒体权限存储在多媒体标识和所需要的多媒体权限的对应关系中。
相应的,步骤(1)具体为:多媒体服务器根据该多媒体信息的多媒体标识,从多媒体标识和所需要的多媒体权限的对应关系中获取播放该多媒体信息所需要的多媒体权限。
(2):多媒体服务器根据用户的多媒体权限资讯和播放该多媒体信息所需要的多媒体权限,确定用户是否能够播放该多媒体信息;
具体地,多媒体服务器确定用户的多媒体权限资讯中是否包含播放该多媒体信息所需要的多媒体权限;如果用户的多媒体权限资讯中包含播放该多媒体信息所需要的多媒体权限,则确定用户能够播放该多媒体信息;否则,则确定用户不能够播放该多媒体信息。
步骤309:多媒体服务器根据多媒体信息的多媒体标识获取该多媒体信息,向终端发送该多媒体信息;
多媒体服务器接收到运营商在多媒体服务器中投放的每个多媒体信息时,分别为每个多媒体信息分配一个多媒体标识,将每个多媒体信息的多媒体标识和每个多媒体信息存储在多媒体标识和多媒体信息的对应关系中。
相应的,步骤309具体为:多媒体服务器根据多媒体信息的多媒体标识,从多媒体标识和多媒体信息的对应关系中获取该多媒体信息,向终端发送该多媒体信息。
步骤310:终端接收多媒体服务器发送的该多媒体信息,播放该多媒体信息。
进一步地,用户还可以向多媒体服务器上传多媒体信息。参见图2-4,其中,该方法包括:
步骤401:终端向多媒体服务器发送多媒体上传请求消息,该多媒体上传请求消息携带用户的多媒体权限资讯和待上传的多媒体信息;
当用户想要向多媒体服务器中上传多媒体信息时,终端获取待上传的多媒体信息和用户的多媒体权限资讯,向多媒体服务器发送多媒体上传请求消息,该多媒体上传请求消息携带用户的多媒体权限资讯和待上传的多媒体信息。
步骤402:多媒体服务器接收终端发送的多媒体上传请求消息,根据用户的多媒体权限资讯确定用户是否能够上传多媒体信息,如果用户能够上传多媒体信息,执行步骤403;
多媒体服务器根据用户的多媒体权限资讯确定用户的多媒体权限资讯中是否包含上传多媒体信息的权限,如果包含,则确定用户能够上传多媒体信息;如果不包含,则确定用户不能够上传多媒体信息。
步骤403:多媒体服务器存储待上传的多媒体信息。
参见图2-5,本发明实施例提供了权限等级体系***结构图,其中,该结构图中包括:
外部***:需要访问到逻辑服务的外部应用,包括等级体系里的***开通关闭和产品开通送多媒体资源数值,也包括账户体系里的交易和查询等。
网络处理模块:负责处理外部***的请求连接建立和业务请求等,包括接收和处理两个子模块,分别处理连接建立和业务请求。也即处理终端发送的权限开通请求消息、权限获取请求消息、多媒体获取请求消息以及多媒体上传请求消息等。
批量处理模块:逻辑服务定时运行的后台任务,类似于操作***提供的crontab任务,分别有命令处理任务和文件逐行处理任务。对于文件逐行处理任务,可以配置文件输入输出,并可以发送消息到其他内部模块(一般是逻辑的任务模块)进行交互处理。也即每隔预设时长批量更新用户的多媒体资源数值。
逻辑的任务模块:对逻辑***的各项操作进行逻辑处理,是逻辑服务的核心所在。根据内部消息的不同输入,配置对各个预定义变量进行获取、加工和输出等各种处理,从而完成***的逻辑加工。目前支持的各种逻辑有变量的各种加减乘除加工,特殊应用的特殊操作(如联系人验证等),能够满足等级体系和支付体系的现有应用。
存取器和逻辑数据库模块:负责逻辑服务和后台存储之间的协议转换、访问中转等,对逻辑服务屏蔽后台存储的各种差异性。但是,由于实现时后台存储都采用了存储平台架构,这里主要是将逻辑服务的内部请求转换成了建立请求。
存储模块:指标***存储平台,和逻辑服务一起构成整个指标体系,负责指标***的存储。
多媒体服务器将用户的多媒体资源数值存储在存储模块中。
逻辑服务的***框架支持各种服务的加载,可以根据新增业务或者已有业务的新增需求,添加各种服务。服务的管理包括相关so装载,也包括服务所属的模块(运行线程等)和该模块所拥有的内部消息队列等。
So加载和管理
So加载,主要是加载so所支持的可调用函数名,将这些可调用函数名注册到so管理模块。
考虑到网络服务是***的基本功能,逻辑服务自动集成了接收和处理服务,部署这两个服务不需要加载相关so。其他的服务,包括logic_task服务和相关批量处理服务,都需要加载so来支持。
So加载和管理遵循下列的规则:
注册so支持的函数。在加载so的时候指定注册函数的配置,如register="logic_register",如果不指定,则默认使用"plugin_register"函数来注册so支持的函数。
***可调用函数管理。***对加载进来的so的可支持函数进行分类管理,按照so的名字和标识,分别管理其支持函数。调用时,可以根据so名字和函数名来调用,也可以根据标识和函数名来调用,如果不指定so名字或者标识,则在所有装载的so中顺序查找该函数,以第一个找到的函数为准。
服务启动和管理
除了接收和处理服务由***自动启动外,***所支持的其他服务都需要通过加载的方式来启动,启动方法通过调用***所加载so的支持函数来进行。一个服务所使用的函数可以全部由一个so来加载,也可以由多个so来加载,或者,一个so所加载的功能,也可以支持多个服务的启动和管理(如逻辑服务的主体so"logic_task.so",就可以支持多种功能服务的启动和管理)。
服务管理有下面的原则:
服务类型。***支持实时服务和后台批量处理服务。其中,实时服务是指在逻辑服务启动时就开始运行,在逻辑服务运行期间也一直在运行的服务,如网络处理服务,逻辑处理服务等。后台批量处理则类似于操作***提供的后台批量处理服务,在固定时间启动并运行,运行结束后自动退出。
服务配置。任何一个服务,都需要有如下配置:服务标识(标识,从0开始依次递增),服务类型(type,实时服务或者后台批量处理服务),运行时间(run_time,对实时服务没有意义,对后台批量处理服务遵循如下规则,“分时日月周”),初始化入口(init_routine,服务启动所调用的函数,包括线程启动等),服务退出处理(fini_routine,服务退出前调用的函数,包括资源清空等,不指定则不运行),服务模块名称(module_name,唯一标志该服务的名称),消息队列标识(queue_标识,服务获取输入消息的消息队列标识,一般都是0),消息队列长度(queue_size,该服务消息队列的缓冲长度,最多可以缓冲的消息数,无意义),服务启用线程数(thread_num),服务自有配置参数(self_para,服务自行需要的特有配置参数,以空格分隔多个参数)。步中,如果某台从机异常停止服务,则只需要等待该从机恢复服务即可,不会对业务发生影响
消息队列管理
逻辑服务根据“模块-消息队列”的两级方式对***内部消息队列统一进行管理,每个模块都可以有自己的消息队列,各模块消息队列之间互相独立。应用对消息队列进行操作时,根据模块名或者模块标识,和消息队列标识对消息队列进行操作。
服务可以根据自己的业务需要注册自己模块的消息队列,如果不需要使用消息队列,也可以不注册。服务还可以注册模块下属的多个消息队列(可以一次性指定,也可以通过追加方式)。对于一个模块的多个消息队列,一般是由标识为0的消息队列承担该模块的输入消息,其他消息队列作为各个线程的私有队列。
网络消息处理流程
在逻辑服务***框架中,接收模块负责处理客户端的连接建立请求,处理模块负责处理客户端的具体网络数据消息。当前,处理模块只实现了对tcp(Transmission Control Protocol,传输控制协议)数据的接收和处理(udp和unixsocket的处理流程类似,接口也类似,但还需要二次开发)。接收模块在为客户端建立新连接时,根据其协议分配相应协议的处理客户端class(当前只有tcp的class,即tcp客户端class)和相关接口的消息处理class(不同接口有不同的消息处理class,派生于CCommClientMsg基类,需要二次开发)。
网络消息处理的流程如下:
逻辑配置和处理
逻辑处理部分是逻辑服务的核心部分,其主要功能是通过配置化来对客户端的输入进行各种逻辑加工,最终产生各种输出,并更新到后台数据库和其他***(如果有)。
逻辑处理流程
条件判断说明
条件判断在逻辑操作里第一个被执行(如果有),它决定着是否需要执行后面的操作和assert等。参考下面的典型配置如下:<oper flag="1"conditions="SERVICE_TYPE eq QQHOME;CMD eq close"statements="set Fvip0;run get_time IN OUT Flastclosetime"assert_flag="2"asserts="SOURCE_标识eqboss_real;SOURCE_标识eq boss_batch;SOURCE_标识eq calc"/>,其中,oper的属性“flag”和“conditions”属于判断条件部分,“flag”修饰“conditions”部分,“conditions”表示具体的条件判断,多个条件之间用“;”符号分隔。
条件判断flag定义:
不存在flag定义,则表示该flag等于1(参见等于1的定义)。
等于0表示该条件不满足,逻辑操作无效,不应该被执行。
等于1表示conditions的条件是“与”关系,即所有条件都需要被满足才代表结果为真。
等于2表示conditions的条件是“或”关系,即只有一个条件为真,则结果为真。
其余值暂时不支持。
Conditions里面的多个条件判断之间语法相同,其互相关系由flag字段决定。单个条件的语法为:“变量1比较标志变量2或值变量2或值含义解析”,如果“变量2或值”部分是变量,则变量1和变量2的类型必须要一致,如果为值,则其值按照变量1的类型进行解析。
其中,“变量1”表示要比较的主参数,必须是逻辑配置的变量,不能为值。
“比较标志”表示判断条件支持的逻辑比较,分别有(不区别大小写):
Eq:相等,支持整形、字符串和二进制值。
Ne:不相等,支持整形、字符串和二进制值。
Lt:小于,只支持整形。
Le:小于等于,只支持整形。
Gt:大于,只支持整形。
Ge:大于等于,只支持整形。
其余判断条件暂时不支持。
“变量2或值”表示该字段可以是变量,也可以是值,其解析方式由后面的“变量2或值含义解析”字段决定,如下:
“变量2或值含义解析”字段不指定,表示“变量2或值”按照值来解析
“变量2或值含义解析”字段为“variable”,表示“变量2或值”按照变量来解析
“变量2或值含义解析”字段为“name”,表示“变量2或值”按照string类型来解析,最后最后变量名来解析,没使用场景
其他定义为非法
逻辑操作说明
如果条件判断为真,则执行其后面的逻辑操作(如果有)。逻辑操作参考下面的典型配置:<oper flag="1"conditions="SERVICE_TYPE eq QQHOME;CMDeq close"statements="set Fvip 0;run get_time IN OUT Flastclosetime"assert_flag="2"asserts="SOURCE_标识eq boss_real;SOURCE_标识eqboss_batch;SOURCE_标识eq calc"/>,其中,statements="set Fvip 0;run get_timeIN OUT Flastclosetime"为逻辑操作部分,逻辑操作部分可以有多个逻辑操作,用“;”符合进行分隔。
逻辑服务支持的逻辑操作如下:
条件assert退出
执行完逻辑操作后,将会进行条件assert判断(如果有)。条件assert参考下面的典型配置:<oper flag="1"conditions="SERVICE_TYPE eq QQHOME;CMDeq close"statements="set Fvip 0;run get_time IN OUT Flastclosetime"assert_flag="2"asserts="SOURCE_标识eq boss_real;SOURCE_标识eqboss_batch;SOURCE_标识eq calc"/>,其中,assert_flag="2"asserts="SOURCE_标识eq boss_real;SOURCE_标识eq boss_batch;SOURCE_标识eq calc"为条件assert判断部分,多个assert判断之间用“;”符合进行分隔。
Assert意义基本同C语言的“assert”关键字,需要判断条件结果为真,如果不为真,则逻辑操作认为促发逻辑错误,返回错误。
Asserts主要描述判断条件,其语法定义和conditions的语法完全一致,这里不再描述。
assert判断的assert_flag定义:
不存在flag定义,则表示该flag等于1(参见等于1的定义)。
等于0表示该assert判断不需要被执行。
等于1表示asserts的条件是“与”关系,即所有assert条件都需要被满足才代表结果为真。
等于2表示asserts的条件是“或”关系,即只有一个assert条件为真,则结果为真。
其余值暂时不支持。
后台数据异步操作
后台数据异步操作采取三级配置关系,分别为access_存储、access_set和access。
其中,access_存储指定数据操作信息要传递给的目的模块名和消息队列信息,一般只配置一个,属于数据操作的根节点。
access_set表示本次逻辑操作的数据操作信息,一个access_存储可以有多个access_set配置,但是最多只有第一个满足条件的access_set会被执行。access_set里面的flag为1表示该access_set当前为使用状态,不配置或者为其他值则表示当前该access_set不使用,不会被执行。Conditions语法同逻辑操作的条件判断,并且始终是逻辑与操作,如果不配置,则认为conditions满足条件。只有conditions条件判断满足,该access_set才有效。Cmd表示该access_set对后台db的操作是update还是insert等(主要是ttc协议对update和insert的不同导致)。Where_clause语法同conditions,并且也是只有逻辑与操作,其意义在于指明该access_set下面的access操作在后台db执行的操作条件,相当于sql的where部分。
每个access_set都可以配置多个access,只要access满足条件,最终都会被执行。Conditions语法同逻辑操作的条件判断,并且始终是逻辑与操作,如果不配置,则认为conditions满足条件。只有conditions条件判断满足,该access才有效。Statements部分表示对后台数据的操作,其语法同逻辑操作的statements部分,一般只用到add、sub、set等部分。
外部通知
外部通知配置采取三级配置方式,分别为notifys、noti_set和noti。
这里,notifys作为根节点存在,表示其子节点部分为外部通知配置。
noti_set为notifys的直接子节点,是外部通知的一个集合,可以有各种条件来决定一个外部通知的有效性。Notifys可以有多个noti_set,各个noti_set之间互相独立,并且只要满足条件,所有的noti_set都会被执行。noti_set里面的flag和conditions为该noti_set的判断条件部分,其语法定义同逻辑操作的条件判断部分完全一致。只有conditions条件判断满足,该noti_set才有效。
Noti作为noti_set的直接子节点,表示具体的外部通知操作。其中,属性name表示该noti的可读性名称,可以没有,属性queue_标识表示外部通知操作可能需要的消息队列信息,也可以没有,statements表示具体外部通知的逻辑操作,其语法和逻辑操作部分的statements完全一致,不过在外部通知里,通知部分由于比较复杂,一般采取run操作。
逻辑批量服务
为了支持等级类业务批量加减多媒体资源数值和对第一多媒体资源列表中的多媒体资源数值进行排序等的应用,逻辑服务实现了逻辑批量服务,各种应用可以根据应用特点配置自己的批量服务。批量服务由crontab服务类型决定,对于等级业务的批量应用,可以使用函数initLogicBatchProcess(由logic_task.so加载)来启动。initLogicBatchProcess函数将会通过CLogicBatchProcess类来提供批量服务。也即多媒体服务器每隔预设时长通过initLogicBatchProcess函数对用户的多媒体资源数值进行更新。
CLogicBatchProcess提供的批量服务有两种,主要是根据对文件的操作类区别:一种是“whole_file”服务,另一种是“independent”服务。前者表示对输入文件做整体处理,实现上一般认为是***shell命令或者自定义的可执行程序,可以直接运行(通过system执行);后者表示对输入文件进行逐行处理,通过逐行读取输入文件信息,构造内部消息发送给其他异步任务(即logic_task)处理,并且可以进行输出(如果配置有)。
一个批量操作的服务配置是“processes”,具体的服务配置在“processes”的子节点“process”,“processes”可以有一个或多个“process”配置,“process”配置了“whole_file”服务或“independent”服务的具体信息。
一个批量操作可以是多个“whole_file”服务和“independent”服务的组合,对于配置的多个服务,***将会顺序运行,一个服务结束后才会执行下一个服务(很多应用的多个服务之间是有依赖关系的,需要保证顺序)。对于需要同时执行的批量操作,可以配置多个crontab服务。
process的属性type决定了该process是属于“whole_file”还是“independent”服务(这里是“whole_file”服务)。如果是“whole_file”服务,则process由其子节点“run”来指明具体要执行的命令,多个“run”节点之间是顺序执行的,执行完一个再到下一个。“run”节点属性“type”目前只支持“system”(表示用system来调用),属性“cmd”则表示具体要调用的命令,可以有多个命令,多个命令用符号“;”来分隔。
“independent”服务说明
“independent”服务的典型配置如下:
对于“independent”服务,其属性type的值是“independent”,并且,对于“independent”服务,还需要指定处理线程数属性“thread_num”。“independent”服务由处理输入(input)、异步处理(async_msg)和处理输出(output)三部分构成,其处理流程按照该三部分依次如下:
从输入文件中读取一行信息
Input节点的配置决定了输入文件的信息。其属性flag表示要不要进行输入处理(等于1表示需要进行input处理;其他值表示不需要处理,则其他的input配置没有意义,也不会有input处理)。属性file指明要读取信息的文件名,属性名separator则表示该文件每行各字段之间的分隔符。
Input的子节点field一起定义了输入文件的定义字段(各字段之间用separator指定的分隔符进行分隔),多个field节点表示多个字段。属性name表示该字段的名称,从文件中读取到的字段值将在后续以该名称被使用。属性type表示该字段值的类型,当前支持string、int和binary类型。属性len表示该字段值的长度,暂时没有意义。
构造消息发送给异步处理任务(一般就是logic_task)并且获取响应
Aync_msg节点的配置决定了异步处理消息的构造方式,“independent”服务根据配置构造异步消息,发送给指定的异步处理任务,等待其响应,从而完成一次逻辑处理。
Aync_msg节点的属性flag表示要不要进行异步处理(等于1表示需要进行Aync_msg处理;其他的值表示不需要处理,则其他的Aync_msg配置没有意义,也不会有Aync_msg处理)。属性async_module表示异步消息要传送给的异步处理任务的目的模块名。属性async_queue_标识表示异步消息要发送到的目的模块的消息队列标识。属性get_client_routine表示构造异步消息中需要用到的客户端消息类型,“independent”服务将会调用其指定的函数获取一个客户端消息。属性process_routine和属性variable_source主要用于描述下面的字段值,在正式应用中很少使用,在后面描述。
Aync_msg的子节点field一起定义了需要构造的异步消息的client信息,对于每个field,“independent”服务根据其类型调用客户端消息的setIntValue或者setStringValue等函数来设置其参数信息。属性name表示要设置的客户端消息字段名。属性type表示要设置客户端消息字段的类型,其中类型int、string和binary表示该字段是常量,其值就为default所指定的值,如果类型为variable,则该变量的值由default指定的变量决定,default指定变量只能来源于input或者async_msg部分的变量。属性len表示该字段值的长度,暂时没有意义。属性default根据属性type的类型而有不同意义,当type值为int、string或者binary时,表示该类型的常量,当type值为variable时,表示input或者async_msg部分的变量,其变量值决定这里async_msg消息的字段值。
Aync_msg节点的属性process_routine可以根据input和async_msg两部分的参数进行特殊处理,从而达到修改async_msg部分变量值的目的(这些值无法通过下面的一般性配置来获取)。属性variable_source则主要指明变量field的type为variable时,该从哪里的变量解析这些variable,可以是输入部分input的变量,也可以是异步处理部分async的部分,但是只能有一种,默认为input部分。
输出处理output部分用于在处理完一行信息后,记录一行相应的记录信息,正式应用一般没有使用到。
Output节点的属性flag表示要不要进行输出处理(等于1表示需要进行output处理;其他的值表示不需要处理,则其他的output配置没有意义,也不会有output处理)。属性file指明要输出信息到的文件名,属性名separator则表示该文件每行各字段之间的分隔符。属性process_routine和variable_source与异步处理async_msg部分的定义类似,前者用于特殊应用下的输出信息修改,后者用于定义type为variable的field子节点的变量来源。
子节点field表示了每一行信息的输出字段,所有field决定了输出信息的构成,各字段之间用output节点属性separator指定的字符来分隔。Field节点属性和异步处理async_msg的一致,这里不再描述。
本发明实施例提供了多媒体资源数值的实现技术框架图,参见图2-6;本发明实施例还提供了查询多媒体资源数值和权限等级的框架图,参见图2-7;本发明实施例还提供了开通或关闭多媒体资源数值***框架图,参见图2-8;本发明实施例还提供了用户的多媒体资源数值变化的框架图,参见图2-9。
在本发明实施例中,终端向多媒体服务器发送权限获取请求消息,该权限获取请求消息携带用户的用户标识;多媒体服务器根据用户的用户标识,获取用户的权限等级,根据用户的权限等级获取用户的多媒体权限资讯,向终端发送用户的多媒体权限资讯,终端显示用户的多媒体信息;从而用户能够知道自己有哪些多媒体权限,并根据自己的多媒体权限去请求自己能够播放的多媒体信息,这样减轻了多媒体服务器的负担。