一种为客户端传输数据的方法转让专利

申请号 : CN201010621861.3

文献号 : CN102075531B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张昊阳

申请人 : 北京像素软件科技股份有限公司

摘要 :

本发明公开了一种为客户端传输数据的方法:服务器接收客户端发送的激活传输内容数据请求;服务器对应发起该请求的客户端设置推送内容数据事件,该推送内容数据事件包括推送时机及推送频率,推送时机及推送频率根据内容数据的数据量及客户端的活跃度设置;服务器监控所设置的推送内容数据事件的时机成立后,执行推送内容数据事件,按照推送内容数据事件中设定的推送频率将自身更新的内容数据推送给该客户端。本发明提供的方法均衡服务器给客户端发送内容数据的数据量,且无需客户端等待接收内容数据,有效提高了玩家获取对应信息时的流畅度,降低客户端网络流量,避免拥堵,提高使用客户端的玩家体验度。

权利要求 :

1.一种为客户端传输数据的方法,其特征在于,该方法包括:

服务器接收客户端发送的激活传输内容数据请求;

服务器对应发起该请求的客户端设置推送内容数据事件,该推送内容数据事件包括推送时机及推送频率,推送时机及推送频率根据内容数据的数据量及客户端的活跃度设置;

服务器监控所设置的推送内容数据事件的时机成立后,执行推送内容数据事件,按照推送内容数据事件中设定的推送频率将自身更新的内容数据推送给该客户端;

设置的所述推送频率可以采用如下公式计算得到:

abs(预期推送时间-sqrt(当前时间-该客户端上次活跃时间))*权值;

其中,预期推送时间根据内容数据的生成频率及客户端发送激活传输内容数据请求的平均频率设置;该客户端上次活跃时间为在服务器上所建立的客户端活跃度表记录的该客户端活跃度;权值根据内容数据量大小确定;sqrt表示求平方根后取整,abs为取绝对值,*表示相乘,-表示相减。

2.如权利要求1所述的方法,其特征在于,所述推送时机还根据客户端当前是否使用该内容数据设置,当服务器接收到客户端发送的不接受推送指令时,将推送时机设置为无限长。

3.如权利要求1~2中任一项权利要求,其特征在于,所述将自身更新的内容数据推送给该客户端的过程为:服务器和客户端上分别建立内容数据存储队列,在内容数据存储队列中,将内容数据分块对应块标识存储,当服务器更新内容数据时,将更新的内容数据块存储在服务器的内容数据存储队列的前端;

在服务器将自身更新的内容数据推送给该客户端时,获取客户端所设置的内容存储队列中当前内容数据的块标识后,将自身所设置的内容存储队列中位于该内容数据的块标识之前的所有内容数据块发送给客户端。

说明书 :

一种为客户端传输数据的方法

技术领域

[0001] 本发明涉及计算机领域中的客户端与服务器之间的交互技术,特别涉及一种为客户端传输数据的方法。

背景技术

[0002] 随着计算机技术的发展,客户端与服务器之间的交互也越来越多。比如,在大型多人在线角色扮演游戏(MMORPG)中,玩家使用的客户端需要与服务器进行数据交互。在交互过程中,数据传输的效率直接影响服务器效能及玩家使用的客户端与服务器之间的数据传输流量,而玩家使用的客户端与服务器之间的数据传输流量大小直接影响玩家游戏时的延迟。对于MMORPG来说,在紧张激烈的战斗中延迟的时间长短直接决定了玩家游戏体验度,所以尽可能降低服务器与玩家使用的客户端之间的数据传输流量是游戏开发者在设计游戏时的一项重要内容。
[0003] 在进行游戏过程中,玩家使用的客户端与服务器之间传输的数据主要有两类,一类为动作指令交互数据,比如:玩家自身的角色移动与战斗、控制其他玩家的角色移动与战斗、或者玩家自身的属性变化等等。这类数据的传输数据量比较小,直接需要客户端或服务器接收数据后进行处理,而不需要自身存储;另一类为大块的内容数据,该内容数据不能作为固定资源存储在客户端和服务器上,而是动态变化地,需要不时更新,且需要由服务器定期或不定期地传输给请求的客户端,比如,游戏中的各种公告信息、游戏中的服务器事件或游戏中的服务器活动的列表、或者使用客户端的玩家信件。
[0004] 目前,在游戏过程中,对于大块的内容数据,服务器和客户端之间传输过程为:
[0005] 首先,客户端向服务器发送获取内容数据请求,该请求携带要获取内容数据的标识;
[0006] 其次,服务器接收到客户端发送的该请求后,将对应该请求的内容数据全部或部分发送给客户端;
[0007] 在本步骤中,服务器根据客户端发送的该请求携带的要获取内容数据的标识,查找到对应该请求的内容数据;
[0008] 最后,客户端接收到服务器发送的内容数据后,更新自身所存储的对应的内容数据。
[0009] 采用上述方法虽然可以在游戏过程中,由服务器为作为玩家的客户端发送大块的内容数据,但是,却存在着缺点:在接收到客户端请求后就发送,会造成服务器与客户端之间的瞬间大量数据量,且需要客户端等待接收到数据后再更新,使得使用客户端的玩家体验度降低。

发明内容

[0010] 有鉴于此,本发明提供一种为客户端传输数据的方法,该方法能够均衡服务器给客户端发送内容数据的数据量,且无需客户端等待接收内容数据,提高使用客户端的玩家体验度。
[0011] 为达到上述目的,本发明实施的技术方案具体是这样实现的:
[0012] 一种为客户端传输数据的方法,该方法包括:
[0013] 服务器接收客户端发送的激活传输内容数据请求;
[0014] 服务器对应发起该请求的客户端设置推送内容数据事件,该推送内容数据事件包括推送时机及推送频率,推送时机及推送频率根据内容数据的数据量及客户端的活跃度设置;
[0015] 服务器监控所设置的推送内容数据事件的时机成立后,执行推送内容数据事件,按照推送内容数据事件中设定的推送频率将自身更新的内容数据推送给该客户端。
[0016] 所述推送时机还根据客户端当前是否使用该内容数据设置,当服务器接收到客户端发送的不接受推送指令时,就将推送时机设置为无限长。
[0017] 所述设置的推送频率可以采用如下公式计算得到:
[0018] abs(预期推送时间-sqrt(当前时间-该客户端上次活跃时间))*权值;
[0019] 其中,预期推送时间根据内容数据的生成频率及客户端发送激活传输内容数据请求的平均频率设置;该客户端上次活跃时间为在服务器上所建立的客户端活跃度表记录的该客户端活跃度;权值根据内容数据量大小确定;sqrt表示求平方根后取整,abs为取绝对值,*表示相乘,-表示相减。
[0020] 所述客户端发送激活传输内容数据请求时间间隔大于设置的预期推送时间时,服务器所设置的推送内容数据事件中的推送频率降低直到为0。
[0021] 所述将自身更新的内容数据推送给该客户端的过程为:
[0022] 服务器和客户端上分别建立内容数据存储队列,在内容数据存储队列中,将内容数据分块对应块标识存储,当服务器更新内容数据时,将更新的内容数据块存储在服务器的内容数据存储队列的前端;
[0023] 在服务器将自身更新的内容数据推送给该客户端时,获取客户端所设置的内容存储队列中当前内容数据的块标识后,将自身所设置的内容存储队列中位于该内容数据的块标识之前的所有内容数据块发送给客户端。
[0024] 由上述技术方案可见,本发明采用主动推送的方式将服务器上更新的内容数据发送给客户端,在推送时机和频率选择上,根据客户端的活跃度及要发送内容数据量确定。这样,本发明就不像现有技术那样,在服务器和客户端之间传输内容数据时造成瞬间的数据量增大,均衡了服务器给客户端发送内容数据的数据量。由于本发明采用主动推送的方式传输内容数据,而不是采用现有技术先由客户端请求后,再由客户端等待接收内容数据的方式,所以无需客户端等待接收内容数据,提高了使用客户端的玩家体验度。另外,在服务器向客户端发送更新的内容数据时,只发送增量更新的内容数据,使得服务器与客户端之间的内容数据传输量降低,进一步提高使用客户端的玩家在游戏过程中的体验度。

附图说明

[0025] 图1为本发明提供的为客户端传输数据的方法流程图;
[0026] 图2为本发明采用公式(1)进行推送内容数据事件时,得到的客户端活跃度与推送频率的示意图。

具体实施方式

[0027] 为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
[0028] 从现有技术可以看出,在游戏过程中,服务器为客户端传输内容数据时会造成服务器和客户端之间的数据量瞬间增大,是因为服务器在发送内容数据时,并没有考虑服务器和客户端之间的数据量当前值,而只是根据客户端发送的内容数据请求发送的,这样,在发送内容数据时,就有很大可能会使得传输速率变慢,或者影响服务器和客户端之间的其他数据传输,使得使用客户端的玩家体验度降低。
[0029] 为了克服这个问题,本发明采用主动推送的方式将服务器上更新的内容数据发送给客户端,在推送的时机和频率选择上,根据客户端的活跃度及要发送内容数据量确定。这样,本发明就均衡了服务器给客户端发送内容数据的数据量。
[0030] 由于本发明采用主动推送的方式传输内容数据,而不是采用先由客户端请求后,再由客户端等待接收内容数据的方式,所以无需客户端在请求后等待接收内容数据,提高了使用客户端的玩家体验度。
[0031] 本发明在服务器向客户端发送更新的内容数据时,只发送增量更新的内容数据,使得服务器与客户端之间的内容数据传输量降低,进一步提高使用客户端的玩家在游戏过程中的体验度。
[0032] 图1为本发明提供的为客户端传输数据的方法流程图,其具体步骤为:
[0033] 步骤101、服务器接收到客户端发送的激活传输内容数据请求。
[0034] 在本步骤中,比如当使用客户端的玩家使用游戏中的公告板时,服务器就可以检测到,并确定已经激活了传输公告板的内容数据事件。
[0035] 可以多次执行步骤101,也就是同一客户端可能会多次发送激活传输内容数据请求。
[0036] 在本步骤中,该请求会携带要激活传输内容标识,以便服务器可以识别出该客户端所请求的激活传输内容数据。
[0037] 步骤102、服务器对应发起该请求的客户端设置推送内容数据事件,该推送内容数据事件包括推送时机及推送频率,推送时机及推送频率是根据内容数据的数据量及客户端的活跃度设置的。
[0038] 在本步骤中,在设置推送时机时,对于使用内容数据频繁,较为活跃的客户端设置的推送时机会延迟且推送频率会降低,因为该客户端频繁请求,已经获取了大部分内容数据;对于使用内容数据比较少的客户端设置的推送时机会提前且频率较高,从而降低该客户端在请求内容数据时的内容数据传输堵塞;对于基本不使用内容数据的客户端,则不可以不设置推送内容数据事件,节约资源。
[0039] 更进一步地,对于推送时机还可以根据客户端当前是否使用该内容数据进行设置,当使用客户端的玩家在游戏中发送不接受推送指令时,服务器接收到,就会重新设置对应该客户端所设置的推送数据内容事件的推送时机,设置为无限长。
[0040] 在本步骤中,可以将推送时机设置为2分钟后执行推送内容数据事件,并在服务器上建立客户端活跃度表,将客户端发送激活传输内容数据请求的时间作为该客户端的活跃度,每当客户端发送,就更新该客户端的活跃度。
[0041] 在本步骤中,设置的推送频率可以采用公式(1)计算得到:
[0042] abs(预期推送时间-sqrt(当前时间-该客户端上次活跃时间))*权值[0043] 公式(1)[0044] 其中,预期推送时间是根据内容数据的生成频率及客户端发送激活传输内容数据请求的平均频率设置的,当客户端发送激活传输内容数据请求的时间间隔刚好等于该设定的预期推送时间时,推送内容数据的频率达到最大,反之推送内容数据的频率越小;该客户端上次活跃时间为在服务器上所建立的客户端活跃度表记录的该客户端活跃度;权值是根据内容数据量大小确定的,如果内容数据量小,则设置比较小,如果内容数据量大,则设置比较大;sqrt表示求平方根后取整,abs为取绝对值。
[0045] 在这里,公式(1)中的取平方根的目的是拉平推送频率曲线,让在一段时间内服务器与客户端之间的传输内容数据的频率不要相差太大,使得服务器与客户端之间的数据传输量保持稳定。
[0046] 图2为采用公式(1)进行推送内容数据事件时,得到的客户端活跃度与推送频率的示意图,从图中可以看出,客户端的活跃度间隔越接近设置的预期推送时间,则推送频率越低,反之,则推送频率越大。
[0047] 在该步骤中,当客户端发送的激活传输内容数据请求时间间隔大于设置的预期推送时间时,比如大于6,也就是30分钟没有操作,则服务器所设置的推送内容数据事件可以设置为完全停止,也就是设置推送频率逐渐降低,直到为0。
[0048] 步骤103、服务器监控到所设置的推送内容数据事件的时机成立后,执行推送内容数据事件,按照推送内容数据事件中设定的推送频率将自身更新的内容数据推送给该客户端。
[0049] 在本步骤中,所推送的内容数据是根据步骤101请求携带的内容数据标识确定的。
[0050] 在本发明中,服务器实时会对要发送给客户端的内容数据更新,为了进一步减小服务器与客户端之间的内容数据传输量,在传输时,只是将针对该客户端更新后的内容数据传输。为了达到这个效果,采用了增量更新方法,也就是在服务器和客户端上分别建立内容数据存储队列,在内容数据存储队列中,将内容数据分块对应块标识存储,当服务器更新内容数据时,就将更新的内容数据块存储在服务器的内容数据存储队列的前端,这样,在服务器发送更新的内容数据时,只需获取客户端所设置的内容存储队列中当前内容数据的块标识后,将自身所设置的内容存储队列中位于该内容数据的块标识之前的所有内容数据块发送给客户端即可。
[0051] 在本发明中,内容数据块的划分可以根据具体需求处理,这里不再限定。
[0052] 举一个具体例子说明本发明提供的方法
[0053] 假设一个网络游戏具有公告板,该公告板用于记录使用客户端的玩家发送的消息,同时也将该公告板记录的消息发送给使用其他客户端的玩家查看,公告板中记录的消息就是内容数据。
[0054] 服务器要维护公告板,在接收到使用客户端的玩家发送消息或删除消息时,就需要更新公告板,并将更新的公告板发送给发送激活传输公告板内容数据请求的其他客户端。对于服务器来说,要维护的公告板的内容数据量是巨大的。
[0055] 使用客户端的玩家发送激活公告板内容数据请求,也就是玩家打开公告板界面,这时,服务器就会接收到该请求,在网络游戏中,同时或不同时发送该请求的客户端有很多,所以服务器就会接收到很多该请求,如果直接根据该请求,为发起该请求的客户端传输公告板内容数据,就会引起客户端与服务器之间传输的数据量瞬间增大。因此,采用本发明提供的方法,服务器接收到该请求后,并不立即为客户端发送公告板内容数据,而是为该客户端建立推送公告板内容数据事件,该推送公告板内容数据事件中的推送时机是根据要更新的公告板内容数据量确定,推送频率则是根据客户端的活跃度设定,这样,就可以为不同客户端按照不同推送时机与推送频率推送公告板内容数据。
[0056] 在该实施例中,客户端也可以在游戏中向服务器发送不接受推送指令,也就是在游戏的副本/PVP状态中设置不接受推送状态的信息,这时,当服务器接收到后,就不为该客户端设置推送公告板内容数据事件。
[0057] 在该实施例中,当服务器根据所设置的推送公告板内容数据事件为客户端推送公告板内容数据,推送的为更新公告板内容数据。具体地,不采用分页传输的方式,而是将公告板内容数据进行分块,每个使用客户端的玩家数据作为一个块进行保存,在一个玩家更新公告板上的消息时(包括发送或删除),就更新对应该客户端的数据块,当其他玩家要接收推送的公告板内容数据时,也只推送更新的数据块,从而降低了服务器与客户端之间传输的数据量。
[0058] 在该实施例中,如果客户端有非常大量的公告板内容数据需要更新,服务器采用分页的方式将公告板内容数据推送给客户端。但是,当客户端只是需要更新某些其他客户端的公告板内容数据时,也就是发送排序或筛选请求时,则无需将所有公告板内容数据都推送给该客户端。服务器检测该客户端上设置的内容数据存储队列,确定其已有的内容数据块标识后,将自身内容数据存储队列中在其已有的内容数据块之后更新的内容数据,进行排序或筛选,最后推送给客户端。该客户端接收后,与自身存储的公告板内容数据合并就可以得到公告板,并显示给使用该客户端的玩家。
[0059] 在该实施例中,如果服务器具有多个,包括一个主控服务器和多个被控服务器,主控服务器与被控服务器之间也可以采用上述方法同步公告板内容数据,确保由不同被控服务器提供服务的客户端之间共享统一的公告板内容数据,主控服务器和多个被控服务器之间的数据传输量也比较小,在可接受的范围内。
[0060] 以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。