[发明专利]一种网络游戏中的指令处理方法有效
申请号: | 201110460596.X | 申请日: | 2011-12-31 |
公开(公告)号: | CN102436368A | 公开(公告)日: | 2012-05-02 |
发明(设计)人: | 钟文杰 | 申请(专利权)人: | 北京像素软件科技股份有限公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38 |
代理公司: | 北京德琦知识产权代理有限公司 11018 | 代理人: | 谢安昆;宋志强 |
地址: | 102200 北京市昌平*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 网络游戏 中的 指令 处理 方法 | ||
技术领域
本发明涉及指令处理技术领域,特别涉及一种网络游戏中的指令处理方法。
背景技术
大型多人在线游戏(MMOG),尤其是实时超大型多人在线游戏(RSMMOG)需要具备同场景承载超过数千人甚至更高在线人数,同时保持实时响应玩家操作指令和及时反馈处理结果的能力。一直以来,MMOG最大的技术难点在于如何在保证快速响应玩家的操作指令的前提下,提高同时在线人数。而随着玩家和游戏内非玩家角色(NPC)数量的增加,服务器的运算压力和存储压力急剧上升,为了解决这一问题,一般有两类做法:升级服务器硬件和提高服务器处理效率。前者由于硬件技术的限制,无法做到无限提升,且成本巨大;而后者则可以通过软件改进,成本低,是MMOG设计的主要关注方向。
对于提高服务器处理效率,通常会采用以下几种方式中的一种或几种来实现:
①将玩家分组,并分配到不同场景中,每个场景只有较少的玩家,将不同场景分配给不同线程处理,不同场景之间的玩家不能实现完全交互。
②允许大量的玩家聚集在单一场景,但这个场景只能做特定的某些操作,不能实现完全交互;
③采用回合制游戏方式;
④降低NPC的逻辑复杂度,或者降低NPC的逻辑调用频率,节省出来的处理能力集中处理玩家操作响应;
⑤使用地形分割将场景分成小块,通过多线程或者多进程分担处理不同分块内玩家的操作指令。
前4种方式虽然实现简单,但会限制网络游戏的功能或者降低玩家的体验,造成玩家间交互不足,或游戏玩法受限,或使NPC智能降低,实际上是因为服务器性能而对游戏性进行折中的做法,而第5种则对游戏性没有损失,且充分利用了服务器多线程机制,是一种比较先进的做法。
具体来说,第5种方法就是把原本整块的场景分割为多个小块,由不同的线程或者进程分别处理不同小块的场景,从而充分利用服务器的多线程处理能力。
虽然第五种方法可以在保证不影响游戏体验的前提下,一定程度上缓解服务器的压力,但这种方式的最终效果受具体游戏运行情况影响较大,具体来说,就是受到场景分块和玩家在场景中的分布情况影响,玩家比较分散时,服务器各进程之间处理负担比较均衡,此时的处理效率较高,但是一旦出现玩家或NPC聚集在某一分块而其它分块空闲的情况,服务器的处理效率就会很低,无法充分利用服务器的多线程处理能力。此外,把场景分块以后,相邻块中间的过渡区域处理是这种方法的一大难点,分块过多过小反而会使运行效率急剧降低。
另外,除了在线程分配层面上存在处理效率不高的问题,在具体指令执行层面也存在一个问题,那就是数据竞争(Data Race),即当多个线程或者多个进程同时尝试对一个或一组数据进行写入时,假设线程A刚好先于线程B写入,则线程B写入的数据会部分或全部覆盖线程A写入数据,而这时候线程A认为数据依然是它写入的那个,从而导致执行错误,这种现象就称为数据竞争。数据竞争是多线程处理中最常见也最难处理的问题,通常会使用加锁、信号量等同步操作来避免。
加锁或信号量等同步操作是为了避免数据竞争的发生,使线程在处理数据前,尝试对数据共享区进行锁定,当锁定成功,则继续数据处理过程,否则等待直到获得锁。加锁虽然能避免数据竞争的发生,但可能会使其它线程或进程进入等待状态,频繁的等待会极大的降低多线程处理的效率,在某些情况下会比单线程处理还要慢。
所以,总的来说,现有的网络游戏在将用户操作指令的具体处理负载分配到多个线程的分配策略层面以及多线程具体的指令执行层面上,都存在着不能充分利用多线程处理能力,处理效率不高的问题。
发明内容
有鉴于此,本发明提供了一种网络游戏中的指令处理方法,可以充分利用服务器的多线程处理能力,具有极高的处理效率。
为达上述目的,本发明的技术方案具体是这样实现的:
一种网络游戏中的指令处理方法,该方法包括:
将客户端发送给服务器的操作指令按照从复杂到简单的逻辑层级拆分为多个原子指令分配到多个线程或多个进程并行处理;
其中,同一指令处理循环中,不同逻辑层级的原子指令不同时处理;
所述原子指令包括逻辑指令和数据变更指令,其中每一个逻辑指令仅包含一个操作,且不对具体数据进行修改;每一个数据变更指令仅对一个数据变更一次。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京像素软件科技股份有限公司,未经北京像素软件科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110460596.X/2.html,转载请声明来源钻瓜专利网。