需要对非成年人玩游戏执行沉迷,收益减少、踢出游戏等,我们平台下有很多游戏,请求量也比较大。如何设计一款稳定、可靠的沉迷时间统计系统

2010-11-05 14:03:13

4 Answers

1 在平台部分记录防沉迷验证,另外在每个游戏的账号信息中加入是否通过防沉迷的变量,在用户激活或者首次进入一个游戏时,去平台取一下是否通过防沉迷的记录,如通过,则直接改变账号信息中的变量,若未通过,则在相关游戏中通知用户的防沉迷信息,要求他通过防沉迷验证;
2 当一个用户为未通过防沉迷验证状态时,每次重新进入游戏都需要再去平台取一下是否通过防沉迷的记录。
3 对于平台下的所有游戏,制定一个统一的防沉迷惩罚,即没有通过防沉迷验证之前,那些收益需要减半,在超过一定数量之后,那些受益需要终止,所有需要被防沉迷惩罚操作的数据或者变量,在每个游戏设计的时候应该有统一的要求并制定同样的接口,做到即插即用。
4 防沉迷规定3个小时收益减半,5个小时收益消失,但最简单的办法,是超过3个小时就强制弹出身份证验证框,并锁定所有界面不允许操作,从技术上,这种方式比较粗暴,从用户感受上也不好,但能够大大增加防沉迷的激活率(从经验上,网页游戏过了3个小时还不愿意激活防沉迷的,基本上都是会流失的用户,但激活后反而流失率降低)

补充一点,如果我是策划,我会设计一个很高收益的任务用于激活防沉迷。这样,至少玩家会想尽办法进行激活,好吧,我承认我是钻空子了:) 

2010-11-05 15:42:44

Menqi0 着重从产品及运营的角度去设计,我从技术方向说下几点要注意的地方:
安全问题:
1.若服务器返回的沉迷验证信息没加密,客户端这边可以被用户拦截封包并伪造“验证通过信息”。所以协议需要加密
2.计算沉迷时间任何时候不能以本地时间为准,因为用户可以修改本地系统时间,使得沉迷时间未到。这也是很多软件被破解的原因。
3.防沉迷系统一般使用UDP协议发送数据包,服务器使用一个计时器。但恶意软件可以对服务器发起UDP Flood攻击,服务器与每个UDP端口相对应的是有一个缓冲队列的,若接收的数据把队列填满,则后面的数据会被丢弃。这样造成正常用户的数据无法响应。解决方法是配置只接收限制的源IP和端口数据

性能问题:
1.虽然使用UDP协议,减少了TCP协议为每个用户创建一个连接的开销。但玩家千千万,防沉迷用户数量也非常多。所以仅靠一台服务器处理UDP数据时远远不够的,很容易造成换成队列被填满。可以使客户端端发送的UDP目的地址为服务器的广播或多播地址,使用多台服务器来处理
2.数据来回交互占用带宽:客户端查询时间,服务器返回时间。可以把所有客户端和服务器端加入一个多播地址,加入方法见:“对于一个具有几百万粉丝的用户,数据如何实时投递到所有用户?”。然后服务器每隔半个小时或一个小时,向组播地址发起一次通知。根据组播的特性,是只用发送一份数据给路由器,大大减少了通信流量。而且客户端无需回复,对比本地记录的登录时间变量就行。

2010-11-05 18:02:48

个人意见,防沉迷只需做客户端即可,服务器不需过多处理。
我觉得防沉迷对游戏平衡等影响并不大,所以不需耗费过多资源去处理这个问题。
如果有人使用非法手段绕过防沉迷,由他去吧,不仅对运营方面无害,而且无形中多了在线客户,活跃了游戏。
对上面可交代,我的游戏对未成年人有防沉迷功能,你可以测试。他用了非法手段突破防沉迷,不属于我的过错。

2010-11-05 19:14:02

将是否通过防沉迷验证的字段增加在各个游戏的数据库设计中,这样如果通过了防沉迷验证,就不需要再次到平台请求。
不知道这样设计是否有安全方面的漏洞?

2010-11-05 20:22:41
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制