CN102103657A - 虚拟世界系统及实现虚拟世界的方法 - Google Patents
虚拟世界系统及实现虚拟世界的方法 Download PDFInfo
- Publication number
- CN102103657A CN102103657A CN2010105667333A CN201010566733A CN102103657A CN 102103657 A CN102103657 A CN 102103657A CN 2010105667333 A CN2010105667333 A CN 2010105667333A CN 201010566733 A CN201010566733 A CN 201010566733A CN 102103657 A CN102103657 A CN 102103657A
- Authority
- CN
- China
- Prior art keywords
- map
- subregion
- virtual world
- place
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种虚拟世界系统,所述系统是基于Erlang语言实现的,所述系统包括:网关,根据客户端发送的虚拟世界中对象的当前位置信息以及数据库中保存的对象——地图映射表,确定该对象所在的地图;将所述对象的当前位置信息发送给所述地图唯一对应的进程服务器中的地图进程;进程服务器,包含一个或多个地图进程,根据分区广播算法,将所述对象的当前位置信息通过所述网关广播给该对象所在分区的广播集合中的对象;数据库,保存最新的对象——地图映射表。本发明实施例同时还提供了一种实现虚拟世界的方法,通过上述的系统和方法,提高了虚拟世界中对象的处理效率,并实现了高性能的广播传送。
Description
技术领域
本发明涉及通信领域,尤其涉及虚拟世界系统及实现虚拟世界的方法。
背景技术
C/S(客户端/服务器)结构的2D虚拟世界广泛应用在现在流行的MMORPG(大型多人在线角色扮演游戏)中。在这种系统中,服务器模拟出一个持久和联通的公共空间,客户端提供与这个空间互动的人机界面,在客户端连接上服务器后,用户就可以观察、探索、影响虚拟世界,并可以与其他联机的用户进行交互。
用户在虚拟世界中最基本的动作是移动自己的位置并观察世界中其他的对象,所以构建这样的系统时,服务器需要解决的一个核心问题是如何在有大量联机用户时高性能地处理用户移动,并把该用户周围的其他用户的移动信息及时描述给该用户。
现有技术中采用的方法如下:
由于本质上虚拟世界中的对象是并发的,现有技术将联通的空间即地图和地图中每个对象建立一个进程,当对象移动时,客户端将数据包发给对应的对象进程,此进程可修改对象的状态数据,并通知地图进程进行广播。
现有技术的缺陷如下:
实际应用中,当对象数很大时,上述方案由于并发度过高,进程数和进程间通信量都很大,系统运行时产生大量进程切换和访问,消耗了大量的资源,系统性能低下。另外考虑到可扩展性的需求,虚拟世界必然是分布式的,地图进程分布在不同的节点上,对象进程或需要跟随所在地图不同而在不同节点上进行重建——重建可能会丢失链接,客户端需要重连服务器;或者需要对地图进程发起跨节点访问——跨节点访问则会影响性能。
发明内容
本发明的目的是提供一种虚拟世界系统以及一种实现虚拟世界的方法,所述系统和方法是基于Erlang(通用的面向并发的编程语言)实现的,所述系统和方法提高了虚拟世界中对象的处理效率,并实现了高性能的广播传送。
为了实现上述目的,本发明实施例提供了一种虚拟世界系统,所述系统是基于Erlang语言实现的,所述系统包括:
网关,用于根据客户端发送的虚拟世界中对象的当前位置信息以及数据库中保存的对象——地图映射表,确定该对象所在的地图,其中,所述地图包含多个分区;将所述对象的当前位置信息发送给所述地图唯一对应的进程服务器中的地图进程;
进程服务器,包含一个或多个地图进程,用于根据分区广播算法,将所述对象的当前位置信息通过所述网关广播给该对象所在分区的广播集合中的对象;
数据库,用于保存最新的对象——地图映射表。
上述的地图进程包括:
分区确定模块,用于接收所述网关发送的所述对象的当前位置信息,确定该对象所在的当前分区信息;
切换判断模块,用于根据所述分区确定模块确定的当前分区信息和进程字典中记录的该对象的原位置信息所对应的分区信息,判断所述对象是否发生分区切换;
广播模块,用于当切换判断模块判断所述对象发生分区切换时,将所述对象从进程字典中保存的原分区的对象集合中移入当前分区的对象集合中;将进程字典中保存的当前广播集合中新增分区的对象集合信息发送给所述对象;同时,将所述对象的位置信息发送给进程字典中保存的该对象所在当前分区的广播集合中的对象;
进程字典,用于保存地图中各分区的对象集合和广播集合,以及各分区内对象的位置信息。
优选的,上述的地图进程还包括:
更新模块,用于当所述切换判断模块判断所述对象发生地图间的切换时,更新数据库中的对象——地图映射表。
上述涉及到的广播集合为所述对象所在分区以及该分区的相邻分区的集合。
为了实现上述目的,本发明实施例还提供了一种实现虚拟世界的方法,所述方法是基于Erlang语言实现的,所述方法包括:
网关根据客户端发送的虚拟世界中对象的当前位置信息以及所述虚拟世界中保存的对象——地图映射表,确定该对象所在的地图,其中,所述地图包含多个分区;
网关将所述对象的当前位置信息发送给所述地图唯一对应的虚拟世界中的进程服务器中的地图进程;
所述地图进程根据分区广播算法,将所述对象的当前位置信息广播给该对象所在分区的广播集合中的对象。
上述实现虚拟世界的方法,其中,在所述网关根据客户端发送的虚拟世界中对象的当前位置信息以及所述虚拟世界中保存的对象——地图映射表,确定该对象所在的地图的步骤之前,所述方法还包括:
将所述虚拟世界中包含的多个地图分别进行分区。
上述实现虚拟世界的方法,其中,所述地图进程根据分区广播算法,将所述对象的当前位置信息广播给该对象所在分区的广播集合中的对象的步骤包括:
所述地图进程根据所述对象的当前位置信息,确定该对象所在的当前分区信息;
根据所述对象的当前分区信息和所述地图进程的进程字典中记录的该对象的原位置信息所对应的分区信息,判断所述对象是否发生分区切换;
当判断发生分区切换时,将所述对象从进程字典中保存的原分区的对象集合中移入当前分区的对象集合中;将进程字典中保存的当前广播集合中新增分区的对象集合信息发送给所述对象;同时,将所述对象的位置信息发送给进程字典中保存的该对象所在当前分区的广播集合中的对象。
上述实现虚拟世界的方法,其中,还包括:当所述对象发生地图间的切换时,所述地图进程更新所述对象——地图映射表。
上述实现虚拟世界的方法步骤中涉及到的广播集合为所述对象所在分区以及该分区的相邻分区的集合。
本发明实施例具有以下的有益效果:
本发明具体实施例的虚拟世界系统以及实现虚拟世界的方法,是基于Erlang语言实现的,通过网关将对象的当前位置信息发送给该对象所在地图唯一对应的进程服务器中的地图进程,地图进程根据分区广播算法,将所述对象的当前位置信息广播给该对象所在分区的广播集合中的对象。
以上方案中,基于Erlang语言实现虚拟世界系统具有天生的分布式特性,网络通信性能强,可扩展性强等优点;采用分区广播算法,减少了数据的广播量;利用广播集合、对象集合的概念和进程字典,实现了高性能的广播操作;利用单个地图对应一个地图进程来处理对象事件,克服现有技术中进程数量过大问题,且减少进程间切换带来的额外开销;本技术方案相对于现有技术,对象不再有独立的进程,而是将对象全部融合进地图进程中进行处理,也就解决了进程间访问的问题,跨节点访问问题也不复存在;采用独立的网关管理系统的网络通信,减轻了进程服务器的压力。
附图说明
图1为本发明实施例的地图分区示意图;
图2为本发明实施例的对象进行分区切换前的广播集合示意图;
图3为本发明实施例的对象进行分区切换后的广播集合示意图;
图4为本发明实施例虚拟世界系统的结构示意图;
图5为本发明实施例地图进程的结构示意图;
图6为本发明实现虚拟世界的方法的第一实施例的流程示意图;
图7为本发明实现虚拟世界的方法的第二实施例的流程示意图。
具体实施方式
本发明实施例的虚拟世界系统以及实现虚拟世界的方法,是基于Erlang语言实现的,通过网关将对象的当前位置信息发送给该对象所在地图唯一对应的进程服务器中的地图进程,地图进程根据分区广播算法,将所述对象的当前位置信息广播给该对象所在分区的广播集合中的对象。通过上述的系统和方法,提高了虚拟世界中对象的处理效率,并实现了高性能的广播传送。
为了便于理解本发明的技术方案,现将本发明的设计思路进行阐述如下:
本发明技术方案是基于Erlang语言实现的,Erlang语言是一种函数式语言,它的设计以代码的分布式、大规模并行执行为核心,以轻量级进程为代码执行单元,不支持传统语言如C语言所提供的指针和进程间共享内存访问等特性。因此,用Erlang实现的系统有天生的分布式特性,网络通信性能强劲,可扩展性强,但是同时需要解决如下问题:在没有指针和进程间共享内存访问的条件下,如何高效地处理对象数据?以及如何快速确定对象的广播范围?
在本实施例中,以二维世界的情况为例进行说明。
1、分区广播:
由于虚拟世界系统需要把每个对象的位置移动信息广播给其他对象,由于对象移动频率很高,在线用户数量很大,这种广播对系统造成的性能压力是非常可观的,一个优化方式是缩小广播的范围,因为用户通过客户端在任一时刻只能观察世界中相对较小的一个区域,所以某个对象的移动事件,只有可以观察到他的用户才需要知道。因此,可将联通的世界进行分区,并根据可见性以区域为单位制定广播范围。
如图1所示,是本发明实施例的地图分区示意图,具体将整个联通的空间也即地图进行分区,并为每个分区指定一个唯一的标识进行描述,如图中的aa、ab、ac、ae等分区标识,此处不再一一列出。
假设客户端上显示的当前对象的位置始终在显示区域中央附近。
设分区的尺寸为(Dx,Dy),客户端屏幕可见区域的尺寸为(Vx,Vy),则:Dx=Vx*(1+M)/2,Dy=Vy*(1+M)/2,其中M大于零,M的取值和屏幕上可见元素的大小有关。由以上公式可以看出,分区的尺寸比可视区域尺寸的1/2略大一点,该结果是根据测试获得的,这是“分区面积”和“分区切换次数”之间最好的平衡点。(因为分区面积越大,分区中的用户越多,广播压为越大;分区面积越小,用户做分区跳转的开销越大)
设对象当前分区为S,该对象的广播范围是S分区以及S分区的相邻分区,同称为S分区的广播集合,具体如图2,是本发明实施例的对象进行分区切换前的广播集合示意图。
图2中,对于当前对象1来说,其当前分区为cc,cc的广播集合为[bb,bc,bd,cb,cc,cd,db,dc,dd]一共9个分区,这些分区的对象集合分别为:[ ],[2],[ ],[ ],[1,3],[4],[6],[ ],[5],以上对象对应的用户才需要知道当前对象1的信息。
由于广播以区为单位,所以将每个分区中的对象放到一个集合中,称为该分区的对象集合;在发生区广播时,将事件广播给区内每个对象。
当对象移动导致分区间的切换时,将对象从原分区对象集合中删除,将其加入新分区的对象集合中,对新分区的广播集合进行广播,并将新的广播集合中新增的区域中的对象信息发送给用户,如图3所示,为本发明实施例的对象进行分区切换后的广播集合示意图。
图3中,当前对象1从cc分区移动到了cb分区,将cc的广播集合与cb的广播集合比较,得到ba,ca,da三个新分区。将当前对象的信息从cc的对象集合中删除,将其加入到cb的对象集合;把当前对象1的位置信息发送给分区cb广播集合中的对象(1,2,3,6,7,8);把三个新分区的对象集合([7],[8],[ ])信息发给当前对象1。
单地图进程结构:
考虑到Erlang语言的特性以及对象移动的频繁性,系统涉及到的进程越少性能越好,数据访问尽可能维持在进程内部,避免进程间互访。因此为每个地图创建一个进程,负责处理此地图内所有对象的移动事件。
进程字典是Erlang语言中速度最快的键——值存储工具,为了最大化优化性能,在地图进程中,用Erlang进程字典作为基本数据存取工具。每个分区在字典中有对应的对象集合和广播集合等,集合的具体数据结构有很多种选择,根据实际情况选择最合适的即可,除此之外,每个地图中所有分区的对象集合都保存在此进程字典中,如此,地图进程在模拟此地图时就不需要跨进程查询数据。
网络服务:
由于一个虚拟世界可以有任意多个地图,因此需要在客户端与地图进程间增加一个网络服务层,主要负责管理与客户端的链接,以及为客户端发送的对象事件做数据路由,即确定这些事件应该发送给哪个地图进程进行处理。另外这个层也需要提供地图进程向客户端发送信息的接口。
当对象发生移动事件,客户端将其坐标(x,y)包装成移动事件发送给服务器端网络服务,后者将此移动事件发往对应的地图进程,地图进程按照前述分区广播算法处理对象移动事件。
数据服务:
记录各对象所在的地图,此数据由地图进程进行更新,供网络服务检索。
该设计方案的优点如下:
利用分区广播,大大减少了数据广播量;利用单地图进程的设计,减少了进程间切换带来的额外开销;利用分区集合和进程字典,实现了高性能的广播操作;网络服务层使得系统可以扩展包含任意多个地图,用户在不同的地图间移动时不需要重新建立和服务器的链接;同时由于把网络相关的处理独立出去,也简化了地图进程的逻辑,减轻了地图进程的压力。
在理解了本发明的设计思路之后,现对本发明实施例的技术方案进行介绍。
请见图4,为本发明实施例虚拟世界系统的结构示意图,所述系统是基于Erlang语言实现的,所述虚拟世界系统包括:
网关41,用于根据客户端发送的虚拟世界中对象的当前位置信息以及数据库中保存的对象——地图映射表,确定该对象所在的地图,其中,所述地图包含多个分区;将所述对象的当前位置信息发送给所述地图唯一对应的进程服务器42中的地图进程。此处,地图与地图进程是一一对应的关系,地图进程负责该地图中所有对象的移动事件。还需要说明的是,虚拟世界中包含有多个地图,对多个地图分别进行分区,对象可以在分区内进行移动,其移动有可能会跨分区,或者跨地图。
此处网关41对应上述设计方案中的网络服务,网关41可以有一个或多个,对网关41的详细介绍请参考设计方案中对网络服务的介绍部分,此处不再赘述。
进程服务器42,包含一个或多个地图进程,用于根据分区广播算法,将所述对象的当前位置信息通过所述网关41广播给该对象所在分区的广播集合中的对象;优选的,所述广播集合为所述对象所在分区以及该分区的相邻分区的集合。
在实际应用中,是将对象所在分区以及该分区的相邻分区放在一个列表里用一个循环区遍历;改进方案还可以把当前对象所在分区优先进行广播,然后再对另外相邻分区广播,这样会使快速移动的对象有较好的体验,这是因为其客户端可以获得距离最近的其他对象的数据。
此处进程服务器42中的地图进程对应上述设计方案中的单地图进程结构。对进程服务器42的详细介绍请参考设计方案中对单地图进程结构的介绍部分,此处不再赘述。
数据库43,用于保存最新的对象——地图映射表。此处,在具体实施中,对象——地图映射表由进程服务器42进行更新。
此处数据库43对应上述设计方案中的数据服务,对其的详细介绍也请参见对数据服务的介绍。
通过上述实施例,提高了虚拟世界中对象的处理效率,并实现了高性能的广播传送。
请见图5,为本发明实施例虚拟世界系统地图进程的结构示意图,所述地图进程具体包括:
分区确定模块51,用于接收网关41发送的对象的当前位置信息,确定该对象所在的当前分区信息;当前位置信息可为对象当前的坐标,若坐标为逻辑坐标,还需要将其转化为屏幕坐标。另外,由于分区的大小和位置固定,所以用地图内坐标就可以计算出所在的分区。
切换判断模块52,用于根据所述分区确定模块51确定的当前分区信息和进程字典中记录的该对象的原位置信息所对应的分区信息,判断所述对象是否发生分区切换;
广播模块53,用于当切换判断模块52判断所述对象发生分区切换时,将所述对象从进程字典中保存的原分区的对象集合中移入当前分区的对象集合中;将进程字典中保存的当前广播集合中新增分区的对象集合信息发送给所述对象;同时,将所述对象的位置信息发送给进程字典中保存的该对象所在当前分区的广播集合中的对象;所述分区的对象集合为该分区内所有对象的集合。
进程字典54,用于保存地图中各分区的对象集合和广播集合,以及各分区内对象的位置信息;
进程字典(process dictionary)是Erlang提供的一种进程内键值存储工具,特点是性能非常高,但是只能在本进程内访问。进程字典的数据全是键值对(key-value pair),用put/2或者get/1函数来操作进程字典。
地图进程的进程字典中至少包括以下键值对:
1.对象ID=>对象坐标;
2.分区名=>分区的广播集合;
3.分区名=>分区的用户集合。
针对以上各模块执行功能的详细介绍请参考设计方案中对单地图进程结构的介绍部分。
更新模块55,用于当所述切换判断模块52判断对象发生地图间的切换时,更新数据库中的对象——地图映射表。当对象发生分区切换,并导致对象发生了地图间的切换,需要对对象——地图映射表进行更新,以便网关41将对象的移动事件发往正确的地图进程。
本发明的产品项实施例,基于Erlang语言实现虚拟世界系统具有天生的分布式特性,网络通信性能强,可扩展性强等优点;采用分区广播算法,减少了数据的广播量;利用广播集合、对象集合的概念和进程字典,实现了高性能的广播操作;利用单个地图对应一个地图进程来处理对象事件,克服现有技术中进程数量过大问题,且减少进程间切换带来的额外开销;本技术方案相对于现有技术,对象不再有独立的进程,而是将对象全部融合进地图进程中进行处理,也就解决了进程间访问的问题,跨节点访问问题也不复存在;采用独立的网关管理系统的网络通信,减轻了进程服务器的压力。
下面以一具体实施例进行详细说明。
在虚拟世界系统的网游服务器集群中使用多地图多分区,实现45度斜视角度的2D虚拟世界。
在此例中,首先进行如下说明:
1.客户端通过45度斜视坐标系观察虚拟世界,这个45度的虚拟坐标称之为逻辑坐标,服务器端关心的是可见性,所以服务器端使用与客户端屏幕平行的平面作为坐标系平面,其使用的坐标称之为屏幕坐标;
2.整个虚拟世界包含若干个地图;
3.每个地图有唯一的ID(身份标识);
4.分区名由分区在XY方向上的序号确定;
5.分区名确定一个键,其在地图进程的进程字典中对应的值为该分区的广播集合;
6.每个对象对应唯一的ID;
7.分区名确定一个键,其在地图进程的进程字典中对应的值为该分区的对象集合,结构为Erlang list(通用的面向并发的编程语言列表);
8.对于每个分区内的对象,其ID确定一个键,其在地图进程的进程字典中对应的值为该对象最近一次移动的位置。
系统组成:
客户端:获取客户端输入,并将客户端输入的对象的逻辑坐标包装成移动事件数据包发给网关;
数据库:用于存储对象——地图映射表:Mnesia(分布式数据库管理系统)表,每个对象ID对应一条记录,内容是该对象当前所在地图名。此表由地图进程更新,供网关检索;所述地图名确定地图进程名。
网关:在集群中负责:
1.维护链接:负责建立和保持与客户端的链接;通过节点内的ETS(Erlang虚拟机提供的一种简单的节点内键-值数据存储/查询服务)数据表登记每个用户ID对应的socket(套接字)信息,提供对客户端的信息收发接口;
2.通信协议:二进制数据的封包和解包;
3.数据路由:对客户端发送来的事件做分类处理。对于对象的移动事件,先查对象——地图映射表确定对象所在的地图,然后将移动事件发往对应的地图进程;
进程服务器:地图进程的容器,可以视负载情况包含任意多个地图进程。
另外,集群中可以有任意多个进程服务器。
地图进程:一个注册了全局进程名的进程,其进程名由地图ID确定,此进程管理对应地图中所有对象的位置,在接到移动事件后进行如下处理:
1.坐标变换
将逻辑坐标投影为屏幕坐标;
2.确定分区
根据屏幕坐标确定对象所在的分区名;
3.切换分区
将新坐标与进程字典中记录的旧坐标比较,判断是否发生分区切换;如果需要切换分区,则作如下处理:a、移动对象:把对象从原分区的对象集合list中删除,然后将其加入到新分区的对象集合list中;b、视野变化:比较新分区与原分区的广播集合,取其中新增的分区的对象集合,将这些对象的信息发送给本对象。
4.事件广播
将此对象的信息广播给其所在分区的广播集合,即发送给所述对象所在分区,以及该分区的相邻分区,即最多9个分区的对象集合中每个对象。
另外,地图进程也处理对象进入地图事件,当对象进行地图间的切换时,此时除了上述广播流程以外,还会更新数据库中的对象——地图映射表,以使网关把对象的后续移动事件发往正确的地图进程。
本发明实施例在提供了虚拟世界系统的同时,还提供了一种实现虚拟世界的方法,参见图6,为本发明实现虚拟世界的方法的第一实施例的流程示意图,所述方法是基于Erlang语言实现的,所述方法包括:
S601、网关根据客户端发送的虚拟世界中对象的当前位置信息以及所述虚拟世界中保存的对象——地图映射表,确定该对象所在的地图,其中,所述地图包含多个分区;
S602、网关将所述对象的当前位置信息发送给所述地图唯一对应的虚拟世界中进程服务器中的地图进程;
S603、所述地图进程根据分区广播算法,将所述对象的当前位置信息广播给该对象所在分区的广播集合中的对象。优选的,所述广播集合为所述对象所在分区以及该分区的相邻分区的集合。
由于该方法项实施例是和虚拟世界系统实施例是对应关系,对方法项实施例的详细说明可参照对虚拟世界系统的描述,此处不再赘述,通过上述方法项实施例,提高了虚拟世界中对象的处理效率,并实现了高性能的广播传送。
参见图7,为本发明实现虚拟世界的方法的第二实施例的流程示意图,所述方法是基于Erlang语言实现的,所述方法包括:
S701、网关根据客户端发送的虚拟世界中对象的当前位置信息以及所述虚拟世界中保存的对象——地图映射表,确定该对象所在的地图,其中,所述地图包含多个分区;
在具体实施中,预先将虚拟世界中包含的多个地图分别进行分区。
S702、网关将所述对象的当前位置信息发送给所述地图唯一对应的虚拟世界中进程服务器中的地图进程;此处,地图与地图进程是一一对应的关系,地图进程负责该地图中所有对象的移动事件。
S703、所述地图进程根据所述对象的当前位置信息,确定该对象所在的当前分区信息;
S704、根据所述对象的当前分区信息和所述地图进程的进程字典中记录的该对象的原位置信息所对应的分区信息,判断所述对象是否发生分区切换;
S705a、当判断发生分区切换时,将所述对象从进程字典中保存的原分区的对象集合中移入当前分区的对象集合中;将进程字典中保存的当前广播集合中新增分区的对象集合信息发送给所述对象;同时,将所述对象的位置信息发送给进程字典中保存的该对象所在当前分区的广播集合中的对象。
S705b、当所述对象发生地图间的切换时,所述地图进程更新所述对象——地图映射表。当对象发生分区切换,并导致对象发生了地图间的切换,需要对对象——地图映射表进行更新,以便网关将对象的移动事件发往正确的地图进程。
以上步骤中涉及的广播集合为所述对象所在分区以及该分区的相邻分区的集合。
由于该方法项实施例是和虚拟世界系统实施例、虚拟世界系统地图进程实施例是对应关系,对方法项实施例的详细说明可参照对虚拟世界系统和地图进程的描述。
本发明的方法项实施例,基于Erlang语言实现虚拟世界系统具有天生的分布式特性,网络通信性能强,可扩展性强等优点;采用分区广播算法,减少了数据的广播量;利用广播集合、对象集合的概念和进程字典,实现了高性能的广播操作;利用单个地图对应一个地图进程来处理对象事件,克服现有技术中进程数量过大问题,且减少进程间切换带来的额外开销;本技术方案相对于现有技术,对象不再有独立的进程,而是将对象全部融合进地图进程中进行处理,也就解决了进程间访问的问题,跨节点访问问题也不复存在;采用独立的网关管理系统的网络通信,减轻了进程服务器的压力。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (9)
1.一种虚拟世界系统,其特征在于,所述系统是基于Erlang语言实现的,所述系统包括:
网关,用于根据客户端发送的虚拟世界中对象的当前位置信息以及数据库中保存的对象——地图映射表,确定该对象所在的地图,其中,所述地图包含多个分区;将所述对象的当前位置信息发送给所述地图唯一对应的进程服务器中的地图进程;
进程服务器,包含一个或多个地图进程,用于根据分区广播算法,将所述对象的当前位置信息通过所述网关广播给该对象所在分区的广播集合中的对象;
数据库,用于保存最新的对象——地图映射表。
2.根据权利要求1所述的虚拟世界系统,其特征在于,所述地图进程包括:
分区确定模块,用于接收所述网关发送的所述对象的当前位置信息,确定该对象所在的当前分区信息;
切换判断模块,用于根据所述分区确定模块确定的当前分区信息和进程字典中记录的该对象的原位置信息所对应的分区信息,判断所述对象是否发生分区切换;
广播模块,用于当切换判断模块判断所述对象发生分区切换时,将所述对象从进程字典中保存的原分区的对象集合中移入当前分区的对象集合中;将进程字典中保存的当前广播集合中新增分区的对象集合信息发送给所述对象;同时,将所述对象的位置信息发送给进程字典中保存的该对象所在当前分区的广播集合中的对象;
进程字典,用于保存地图中各分区的对象集合和广播集合,以及各分区内对象的位置信息。
3.根据权利要求1或2所述的虚拟世界系统,其特征在于,所述地图进程还包括:
更新模块,用于当所述切换判断模块判断所述对象发生地图间的切换时,更新数据库中的对象——地图映射表。
4.根据权利要求1、2或3所述的虚拟世界系统,其特征在于,所述广播集合为所述对象所在分区以及该分区的相邻分区的集合。
5.一种实现虚拟世界的方法,其特征在于,所述方法是基于Erlang语言实现的,所述方法包括:
网关根据客户端发送的虚拟世界中对象的当前位置信息以及所述虚拟世界中保存的对象——地图映射表,确定该对象所在的地图,其中,所述地图包含多个分区;
网关将所述对象的当前位置信息发送给所述地图唯一对应的虚拟世界中进程服务器中的地图进程;
所述地图进程根据分区广播算法,将所述对象的当前位置信息广播给该对象所在分区的广播集合中的对象。
6.根据权利要求5所述的实现虚拟世界的方法,其特征在于,在所述网关根据客户端发送的虚拟世界中对象的当前位置信息以及所述虚拟世界中保存的对象——地图映射表,确定该对象所在的地图的步骤之前,所述方法还包括:
将所述虚拟世界中包含的多个地图分别进行分区。
7.根据权利要求5所述的实现虚拟世界的方法,其特征在于,所述地图进程根据分区广播算法,将所述对象的当前位置信息广播给该对象所在分区的广播集合中的对象的步骤包括:
所述地图进程根据所述对象的当前位置信息,确定该对象所在的当前分区信息;
根据所述对象的当前分区信息和所述地图进程的进程字典中记录的该对象的原位置信息所对应的分区信息,判断所述对象是否发生分区切换;
当判断发生分区切换时,将所述对象从进程字典中保存的原分区的对象集合中移入当前分区的对象集合中;将进程字典中保存的当前广播集合中新增分区的对象集合信息发送给所述对象;同时,将所述对象的位置信息发送给进程字典中保存的该对象所在当前分区的广播集合中的对象。
8.根据权利要求7所述的实现虚拟世界的方法,其特征在于,当所述对象发生地图间的切换时,所述地图进程更新所述对象——地图映射表。
9.根据权利要求5、6、7或8所述的实现虚拟世界的方法,其特征在于,所述广播集合为所述对象所在分区以及该分区的相邻分区的集合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105667333A CN102103657A (zh) | 2010-11-29 | 2010-11-29 | 虚拟世界系统及实现虚拟世界的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105667333A CN102103657A (zh) | 2010-11-29 | 2010-11-29 | 虚拟世界系统及实现虚拟世界的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102103657A true CN102103657A (zh) | 2011-06-22 |
Family
ID=44156427
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105667333A Pending CN102103657A (zh) | 2010-11-29 | 2010-11-29 | 虚拟世界系统及实现虚拟世界的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102103657A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103618732A (zh) * | 2013-12-05 | 2014-03-05 | 用友软件股份有限公司 | 一种PaaS与Erlang App应用引擎架构执行流程 |
CN103748548A (zh) * | 2011-06-30 | 2014-04-23 | 亚马逊科技公司 | 存储网关激活过程 |
CN103890815B (zh) * | 2011-08-04 | 2017-09-12 | 游戏软件工作室亚洲私人有限公司 | 用于主管可被远程自动创建、主管和终止的瞬变虚拟世界的方法和系统 |
CN109621408A (zh) * | 2018-11-01 | 2019-04-16 | 苏州蜗牛数字科技股份有限公司 | 一种游戏服务器场景进程负载均衡方法 |
CN109831518A (zh) * | 2019-03-06 | 2019-05-31 | 珠海金山网络游戏科技有限公司 | 一种地图数据下载方法及装置、计算设备和存储介质 |
CN110851266A (zh) * | 2018-08-03 | 2020-02-28 | 奇异世界有限公司 | 通过分区和虚拟进程的负载平衡 |
US11816402B2 (en) | 2016-08-24 | 2023-11-14 | Improbable Worlds Limited | Simulation systems and methods |
US11936734B2 (en) | 2016-08-24 | 2024-03-19 | Improbable Worlds Ltd | Simulation systems and methods using query-based interest |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1624704A (zh) * | 2004-12-02 | 2005-06-08 | 高永安 | 一种网络游戏软件中的虚拟世界仿真模拟真实世界的构建方法 |
US20070239661A1 (en) * | 2006-03-28 | 2007-10-11 | Sun Microsystems, Inc. | Systems and methods for a distributed in-memory database and distributed cache |
CN101470773A (zh) * | 2007-12-25 | 2009-07-01 | 山东易通商业经纪有限公司 | 一种基于web浏览器的网页游戏系统实现方法 |
-
2010
- 2010-11-29 CN CN2010105667333A patent/CN102103657A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1624704A (zh) * | 2004-12-02 | 2005-06-08 | 高永安 | 一种网络游戏软件中的虚拟世界仿真模拟真实世界的构建方法 |
US20070239661A1 (en) * | 2006-03-28 | 2007-10-11 | Sun Microsystems, Inc. | Systems and methods for a distributed in-memory database and distributed cache |
CN101470773A (zh) * | 2007-12-25 | 2009-07-01 | 山东易通商业经纪有限公司 | 一种基于web浏览器的网页游戏系统实现方法 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103748548A (zh) * | 2011-06-30 | 2014-04-23 | 亚马逊科技公司 | 存储网关激活过程 |
US9225697B2 (en) | 2011-06-30 | 2015-12-29 | Amazon Technologies, Inc. | Storage gateway activation process |
CN103748548B (zh) * | 2011-06-30 | 2017-04-26 | 亚马逊科技公司 | 用于激活远程服务提供商的网关的设备和方法 |
CN103890815B (zh) * | 2011-08-04 | 2017-09-12 | 游戏软件工作室亚洲私人有限公司 | 用于主管可被远程自动创建、主管和终止的瞬变虚拟世界的方法和系统 |
CN103618732A (zh) * | 2013-12-05 | 2014-03-05 | 用友软件股份有限公司 | 一种PaaS与Erlang App应用引擎架构执行流程 |
CN103618732B (zh) * | 2013-12-05 | 2017-05-03 | 用友网络科技股份有限公司 | 一种PaaS与Erlang App应用引擎架构执行流程 |
US11816402B2 (en) | 2016-08-24 | 2023-11-14 | Improbable Worlds Limited | Simulation systems and methods |
US11936734B2 (en) | 2016-08-24 | 2024-03-19 | Improbable Worlds Ltd | Simulation systems and methods using query-based interest |
CN110851266A (zh) * | 2018-08-03 | 2020-02-28 | 奇异世界有限公司 | 通过分区和虚拟进程的负载平衡 |
CN109621408A (zh) * | 2018-11-01 | 2019-04-16 | 苏州蜗牛数字科技股份有限公司 | 一种游戏服务器场景进程负载均衡方法 |
CN109831518A (zh) * | 2019-03-06 | 2019-05-31 | 珠海金山网络游戏科技有限公司 | 一种地图数据下载方法及装置、计算设备和存储介质 |
CN109831518B (zh) * | 2019-03-06 | 2021-08-24 | 珠海金山网络游戏科技有限公司 | 一种地图数据下载方法及装置、计算设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102103657A (zh) | 虚拟世界系统及实现虚拟世界的方法 | |
CN109492040B (zh) | 一种适用于数据中心海量短报文数据处理的系统 | |
EP2875653B1 (en) | Method for generating a dataset structure for location-based services | |
CN104539681B (zh) | 分布式gis加速系统和gis服务的处理方法 | |
Cai et al. | Real-time processing of range-monitoring queries in heterogeneous mobile databases | |
CN110209719B (zh) | 一种基于微服务架构的多种数据库统一访问系统及方法 | |
CN101370025A (zh) | 地理信息数据的存储方法、调度方法及管理系统 | |
CN101719148B (zh) | 三维空间信息的存储方法、装置、系统及查询系统 | |
CN103023981B (zh) | 云计算系统 | |
CN112347212A (zh) | 面向bim应用的铁路云gis平台及其搭建方法 | |
CN109871418A (zh) | 一种时空数据的空间索引方法和系统 | |
Das et al. | Spatio-Fog: A green and timeliness-oriented fog computing model for geospatial query resolution | |
KR101654314B1 (ko) | 공간 데이터 분산 처리 시스템 및 그 동작 방법 | |
CN113811928B (zh) | 用于k最近近邻搜索的分布式内存空间数据存储 | |
CN110727738A (zh) | 基于数据分片的全局路由系统、电子设备及存储介质 | |
CN101179475B (zh) | 一种以对等网络方式下载地图数据的方法 | |
CN105354263A (zh) | 基于HBase分布式环境下移动对象并行网格索引同步方法 | |
CN105426384A (zh) | 一种生成建议目标地点的方法和装置 | |
CN107908713A (zh) | 一种基于Redis集群的分布式动态杜鹃过滤系统及其过滤方法 | |
CN102419832A (zh) | 一种分布式环境下资源定位方法及其系统 | |
CN114265869A (zh) | 数据报文的转发方法及装置、存储介质及电子设备 | |
CN104092731A (zh) | 一种云计算系统 | |
CN103685380A (zh) | 地理信息数据的分发服务方法和系统 | |
CN102571891A (zh) | 显示平台的交互方法、系统及消息服务器 | |
CN111190991A (zh) | 一种非结构化数据传输系统及交互方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110622 |