一种视频直播网站的弹幕封禁系统及方法与流程

文档序号:12279893阅读:583来源:国知局
一种视频直播网站的弹幕封禁系统及方法与流程

本发明涉及弹幕式视频直播领域,具体来讲涉及一种视频直播网站的弹幕封禁系统及方法。



背景技术:

现有的视频直播网站中,用户可以通过发送弹幕的方式,在观看视频直播的同时表达自己的想法,但是不免有些用户在直播间发表非法言论、不文明用语等弹幕,针对这种非法弹幕,视频直播网站往往根据其言论不恰当的程度,对用户实施不同时间长短的禁言。现有禁言的方式是通过人工对发表不恰当言论的用户一一进行禁言,服务器会自动发送用户是否处于禁言状态通知用户。但是,由于现有视频直播网站用户数量巨大,当服务器不能满足同时发送大量禁言状态所引发的QPS(Query Per Second,每秒查询率)时,则需要进行新的开发以满足QPS,开发过程非常繁琐。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种视频直播网站的弹幕封禁系统及方法,通过横向扩展的形式,直接增加服务器以满足QPS,不用对服务器做新的开发。

为达到以上目的,本发明采取一种视频直播网站的弹幕封禁系统,包括:

禁言记录模块,用于记录禁言的操作流水;

主远程服务模块,用于用户禁言状态的写入和存储;

权限管理写模块,用于接收并验证禁言请求,管理禁言记录模块和主远程服务模块中数据的写入;

多个从远程服务模块,用于同步主远程服务模块的数据,包括一个第一从远程服务模块,用于持久化数据;至少两个第二从远程服务模块,用于提供数据的读取;

权限读取模块,包括至少一个权限单元,权限单元为无状态单元,用于用户登录后禁言状态的查询。

本发明还提供一种视频直播网站的弹幕封禁方法,包括:

用户在直播间发表非法弹幕时,权限管理写模块接收并验证来自管理员的禁言请求,根据禁言请求中携带的操作类型,主远程服务模块中记录相应的禁言状态,并将记录的禁言状态同步到所有从远程服务模块中,同时禁言记录模块写入禁言请求数据;

用户登录房间时,权限读取模块中的一个权限单元收到查询请求并验证合法后,选取一个第二从远程服务模块查询,通过选取的第二从远程服务模块得到禁言状态。

在上述技术方案的基础上,所述权限管理写模块验证禁言请求正确的条件为:禁言请求包括的用户ID、禁言失效时间戳、操作者ID、禁言原因和禁言操作时间戳都正确。

在上述技术方案的基础上,所述禁言请求包括房间ID和操作类型,操作类型的值为1表示对发表非法弹幕的用户ID在房间内禁言,值为2表示对发表非法弹幕用户使用的IP在房间内禁言,值为3表对发表非法弹幕的用户ID在全网站禁言,值为4表示对发表非法弹幕用户使用的IP在全网站禁言。

在上述技术方案的基础上,在主远程服务模块中记录禁言状态的同时,设置该禁言状态数据的自动销毁时间戳。

在上述技术方案的基础上,所述权限读取模块中权限单元的总数为Sn,每个权限单元都有一个唯一的下标,下标的范围大于等于0,且小于Sn,其中Sn是权限读取模块中服务单元的总数,Sn≥1。

在上述技术方案的基础上,发送查询请求到权限读取模块中的一个权限单元时,首先调用随机函数获取一个随机数Rn,对随机数Rn进行哈希计算获得数值Hn,数值Hn对服务单元的总数Sn求余,余数就是选定权限单元的下标。

在上述技术方案的基础上,每个第二从远程服务模块都有一个唯一的下标,下标的范围大于等于1,且小于等于Ay,其中Ay是第二从远程服务模块总数,Ay≥2;选取第二从远程服务模块时,调用随机函数获取一个随机数By,对随机数By进行哈希计算获得数值Cy,数值Cy对Ay求余后再加1,得到的结果就是选定第二从远程服务模块的下标。

在上述技术方案的基础上,使用从远程服务模块内置的evalsha指令通过lua脚本查询用户的禁言状态。

本发明的有益效果在于:

1、权限读取模块包括至少一个权限单元,权限单元是无状态的,减少服务器工作量,权限单元可以无限制横向扩展;同时,只提供数据的读的从远程服务模块也是可以无限横向扩展的,解决了服务器不能满足定时任务引发的QPS的问题,可以通过直接增加新的服务模块满足QPS。

2、通过哈希算法和取余的形式,计算选取从远程服务模块和权限单元,保证高离散性,实现从远程服务模块和权限单元的负载均衡。

3、使用evalsha指令通过lua脚本查询用户的禁言状态,使原本多次查询的网络交互操作降低为1次网络交互操作,大大降低了时间消耗(远程服务模块操作的耗时主要在于网络交互)。

附图说明

图1为本发明实施例视频直播网站的弹幕封禁系统示意图。

图2为本发明实施例禁言流程图;

图3为本发明实施例用户登陆后自动查询禁言状态的流程图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。

如图1所示,本发明视频直播网站的弹幕封禁系统,包括一个禁言记录模块(MySQL)、主远程服务模块(Master Remote Dictionary Server)、权限管理写模块(Permission Writer)、权限读取模块(PermissionReader Cluster)和多个从远程服务模块(Slave Remote Dictionary Server)。其中,禁言记录模块用于记录禁言的操作流水;主远程服务模块用于用户禁言状态的写入和存储,不做持久化操作;权限管理写模块用于接收并验证禁言请求,管理禁言记录模块和主远程服务模块中数据的写入。多个从远程服务模块,用于同步主远程服务模块的数据,包括一个第一从远程服务模块,用于持久化数据;至少两个第二从远程服务模块,用于提供数据的读取,不做持久化操作。权限读取模块包括至少一个权限单元,权限单元为无状态单元,用于用户登录后禁言状态的查询。

本发明视频直播网站的弹幕封禁方法,包括:

用户在直播间发表非法弹幕时,权限管理写模块接收来自管理员的禁言请求,验证该禁言请求正确后,根据禁言请求中携带的操作类型,主远程服务模块中记录相应的禁言状态,并将记录的禁言状态同步到所有从远程服务模块中,同时禁言记录模块写入禁言请求数据。

用户登录房间时,权限读取模块中的一个权限单元收到查询请求,验证合法后,选取一个第二从远程服务模块进行查询,通过选取的第二从远程服务模块得到禁言状态。

如图2所示,本发明实施例禁言流程具体包括:

S101.当用户在直播间发表非法弹幕时,超管(视频直播网站的巡查管理员)、主播(房间的拥有者)或房管(主播设置的房间内管理员)都可以对用户进行禁言操作。权限管理写模块接收到管理员(包括超管、主播和房管)发送的禁言请求(MuteData),禁言请求包括发表非法弹幕的用户ID(UID)、发表非法弹幕用户的IP地址(IP)、禁言失效时间戳(InvalidTimestamp)、操作者ID(OperatorID)、禁言操作时间戳(OperationTimestamp)、禁言原因(MuteReason)、禁言发生的房间ID(RoomID)和操作类型(OperateType),每个用户拥有全局唯一的32位ID,每个房间有一个唯一的ID。

所述操作类型通过不同的值进行区分,操作类型的值为1表示对发表非法弹幕的用户ID在房间内禁言,值为2表示对发表非法弹幕用户使用的IP在房间内禁言,值为3表对发表非法弹幕的用户ID在全网站禁言,值为4表示对发表非法弹幕用户使用的IP在全网站禁言;并且,只有视频直播网站的超管有权对房间内和全网站禁言,主播和房管只有权在房间内禁言。

S102.权限管理写模块验证禁言请求是否正确,即,判断发表非法弹幕的用户ID、禁言失效时间戳、操作者ID、禁言操作时间戳和禁言原因是否都正确,若是,进入S104,若否,进入S103。

S103.禁言操作失败,结束。

S104.主远程服务模块根据禁言请求中不同操作类型的值,记录对应的禁言状态,记录的同时,根据禁言请求设置该禁言状态的禁言失效时间戳,在失效时间过后,被禁言的用户可以发送弹幕。具体的,操作类型的值为1,调用redis.call(‘set’,‘muteuid:RoomID:UID’,InvalidTimestamp)记录用户的禁言状态;调用redis.call(‘expireat’,‘muteuid:RoomID:UID’,InvalidTimestamp)设置该禁言的禁言失效时间戳。操作类型的值为2,调用redis.call(‘set’,‘muteip:RoomDI:IP’,InvalidTimestamp)记录IP的禁言状态;调用redis.call(‘expireat’,‘muteip:RoomID:IP’,InvalidTimestamp)设置该禁言的禁言失效时间戳。操作类型的值为3,调用redis.call(‘set’,‘muteuid:UID’,InvalidTimestamp)记录用户的禁言状态;调用redis.call(‘expireat’,‘muteuid:UID’,InvalidTimestamp)设置该禁言的禁言失效时间戳。操作类型的值为4,调用redis.call(‘set’,‘muteip:IP’,InvalidTimestamp)记录IP的禁言状态,调用redis.call(‘expireat’,‘muteip:IP’,InvalidTimestamp)设置该禁言的禁言失效时间戳。

S105.主远程服务模块写入禁言请求中的数据后,数据自动同步到所有的从远程服务模块,其中,第一从远程服务模块永久化数据;同时,权限管理写模块还会异步将禁言请求写入禁言记录模块,完成操作流水的记录,便于后期查询禁言操作。

如图3所示,本发明实施例用户登陆后自动查询禁言状态的具体流程如下:

S201.当用户登录房间时,会自动触发禁言查询,查询用户的禁言状态,权限读取模块中的一个权限单元会收到查询请求(QueryData),查询请求包括用户ID、用户所在IP和房间ID。

具体的,所述权限读取模块中权限单元的总数为Sn,每个权限单元都有一个唯一的下标,下标的范围为[0,Sn)其中Sn是权限读取模块中服务单元的总数,Sn≥1。发送查询请求到权限读取模块中的一个权限单元时,首先调用随机函数获取一个随机数Rn,对随机数Rn进行哈希计算获得数值Hn,数值Hn对服务单元的总数Sn求余,余数就是选定权限单元的下标。优选的,调用随机函数Random()获取Rn,对Rn进行BKDR Hash运算。

S202.选取的权限单元解析查询请求中数据是否合法,即,判断是否包含正确的用户ID、房间ID和用户所在IP,如果是,进入若是,进入S204;若否,进入S203。

S203.查询禁言状态失败,结束。

S204.所述权限单元选取一个第二从远程服务模块,发送查询请求。具体的,每个第二从远程服务模块都有一个唯一的下标,下标的范围大于等于1,且小于等于Ay,其中Ay是第二从远程服务模块总数,Ay≥2;选取第二从远程服务模块时,调用随机函数获取一个随机数By,对随机数By进行哈希计算获得数值Cy,数值Cy对Ay求余后再加1,得到的结果就是选定第二从远程服务模块的下标。

S205.选取的第二从远程服务模块提供禁言状态以及该禁言状态的禁言失效时间戳。

优选的,使用从远程服务模块内置的evalsha指令,通过lua脚本查询用户的禁言状态。脚本中,调用redis.call(‘get’,‘muteuid:RoomID:UID’)查询用户ID在对应房间内的禁言状态(state_1,0-未禁言,1-禁言),以及该禁言状态的禁言失效时间戳(invalid_timestamp_1)。调用redis.call(‘get’,‘muteuid:UID’)查询用户ID在全网站的禁言状态(state_2,0-未禁言,1-禁言),以及该禁言状态的禁言失效时间戳(invalid_timestamp_2)。调用redis.call(‘get’,‘muteip:RoomID:IP’)查询用户所在IP在房间内的禁言状态(state_3,0-未禁言,1-禁言),以及该禁言状态的禁言失效时间戳(invalid_timestamp_3)。调用redis.call(‘get’,‘muteip:IP’)查询用户所在IP在全网站的禁言状态(state_4,0-未禁言,1-禁言),以及该禁言状态的禁言失效时间戳(invalid_timestamp_4)。

S206.根据查询到的禁言状态和禁言失效时间戳,得到用户和其使用的IP是否被禁言,被禁言的用户无法在对应位置发送弹幕,直至禁言失效时间之后,才能够重新发送弹幕。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1