基于多核cpu架构的网游服务器的数据分配方法及系统的制作方法

文档序号:6560970阅读:180来源:国知局
专利名称:基于多核cpu架构的网游服务器的数据分配方法及系统的制作方法
技术领域
本发明涉及服务器的数据分配技术,尤其涉及一种基于多核CPU架构的网游服务器的数据分配方法及系统。
背景技术
随着网络游戏的兴盛,单机版的游戏已逐渐被网络游戏所替代,为进一步满足广大玩家的需求,网络游戏平台功能越来越强大,游戏内容越来越丰富,而由此对网络服务器的运算能力要求越来越高。在服务器多核技术出现之前,对网络游戏服务器的运算能力的提高是通过采用服务器分布式架构,多台服务器通过网络连接,把游戏逻辑拆分到不同的服务器上,每个服务器处理一部分的游戏逻辑。
上述方法虽可以有效解决服务器运算能力问题,但同时它也带来了其它问题,首先从程序的角度来讲,由于各个服务器逻辑模块运行在不同的进程,且跨越不同的机器,数据在各个机器间的传递通过本地局域网,速度相对线程内的通信要慢得多;其次从开发管理的角度来讲,分布式的程序开发和调试的成本很高,开发的风险比单机的程序更大;并且,网友运营商需要投入更多的成本来采购更多的机器,租用更多的机柜,增加了运营成本。

发明内容
本发明要解决的技术问题是提供一种基于多核CPU架构的网游服务器的数据分配方法,能够有效利用多核CPU技术来提高服务器的运算能力。
为解决上述技术问题,本发明的目的是通过以下技术方案实现的本发明提供一种基于多核CPU架构的网游服务器的数据分配方法,包括接收客户端发送的连接请求,判断得到该连接请求所属的游戏线程组后,并将该连接请求发送至该线程组中的线程上;接收连接请求的线程处理该请求,建立与客户端的连接;
接收客户端新的游戏逻辑请求,将其发送至客户端所连接的线程处理。
其中,判断得到接收的连接请求所属的游戏线程组后,进一步判断得到该线程组中负载最轻的线程,并将该连接请求发送至该线程上。
其中,该方法进一步包括定时计算每个线程的负载程度,将负载较重的线程所连接的至少一个客户端连接到负载较轻的线程上。
其中,该方法进一步包括将线程完成的处理结果反馈至所连接的客户端。
其中,该方法进一步包括接收到客户端发送的跨越游戏线程的请求时,将原来游戏逻辑请求数据从原来连接的游戏线程发送到客户端欲跨越到达的新的游戏世界所属的游戏线程上。
本发明提供一种基于多核CPU架构的网游服务器的数据分配系统,包括数据接收存储单元、数据分配管理单元;数据接收存储单元,用于接收并存储客户端发送的游戏逻辑请求数据;数据分配管理单元,用于读取数据接收单元中的游戏逻辑请求数据,并通过判断该请求数据所属的游戏世界,获得对应的处理该请求数据的游戏线程组,将游戏逻辑请求数据发送至该游戏线程组中的线程上。
其中,数据分配管理单元在判断得到所接收的游戏逻辑请求数据所属的游戏线程组之后,进一步判断得到游戏线程组中的负载最轻的游戏线程,将游戏逻辑请求数据发送至该游戏线程。
其中,该系统还包括数据动态调配单元,用于定时计算每个游戏线程组中的游戏线程的负载程度,将负载较重的游戏线程所连接的部分客户端连接到其它负载较轻的游戏线程上。
其中,数据接收存储单元的功能进一步包括接收并存储处理完成的游戏逻辑请求数据;数据分配管理单元的功能进一步包括读取数据接收存储单元中已处理完成的游戏逻辑请求数据,将处理完成的数据反馈给客户端。
其中,所述数据分配管理单元的功能进一步包括判断得到从数据接收存储单元中所读取的游戏逻辑请求数据为跨越游戏线程的请求时,将原来的游戏逻辑请求数据,从原来连接的游戏线程组发送到客户端欲跨越到的新的游戏世界所属的游戏线程组。
以上技术方案可以看出,由于本发明利用多核CPU技术,在一个服务器上采用多个游戏线程组的情况下,充分利用多核CPU的运算能力,对客户端发送的游戏逻辑请求数据按照客户所在的不同游戏世界在不同的游戏线程上进行分配,并运行在一个机器上,本发明中各游戏线程共享一个内存,服务器各个逻辑模块运行在同一个进程中的多个线程上,线程间的切换代价很低,各个模块间相互访问时,网络传输速度提高了很多,与现有技术中为提高运算能力而架构多台服务器相比,本发明在单个服务器多线程架构的情况下,有效提高了运算速度,降低了运营成本。
进一步,为避免游戏线程组中的某些线程负载过重,本发明通过定时计算每个线程的负载程度,将负载较重的线程所连接的至少一个客户端连接到负载较轻的线程上,使得客户端发送至服务器的游戏逻辑请求数据在游戏线程上得到更合理的分配,更有效地提高了服务器的预算能力。


图1为本发明实施例一中的方法流程图;图2为本发明实施例一中的系统结构框图;图3为本发明实施例二中的方法流程图;图4为本发明实施例三中的方法流程图;图5为本发明实施例三中的系统结构框图;
图6为本发明实施例四中的方法流程图。
具体实施例方式
本发明的核心思想是在多核CPU架构的网游服务器的基础上建立多组游戏线程,通过IO请求管理线程(输入输出请求管理线程)对客户端发送的游戏逻辑请求数据在不同的游戏线程上进行分配,从而发挥多核CPU运算能力优势,在单服务器的情况下有效提高运行效率。
本发明中,为了最大限度地利用CPU多核可执行多线程的特性,系统初始化时,将执行游戏逻辑计算等操作的游戏线程根据需要分为若干组,将一个游戏分为若干个游戏世界,每一组游戏线程对应一个游戏世界,而该组中的每一线程处理对应游戏世界里特定的对象。
为使本发明的目的、技术方案及优点更加清楚明白,以下结合具体实施例并参照附图对本发明作详细描述。
实施一,参见附图1,为实现发明目的,本发明提供的方法具体流程如下步骤101IO请求队列(输入输出请求队列)接收客户端的连接请求,IO请求管理线程读取IO请求队列接收的该请求;其中,IO请求队列为用于存储客户端发送的请求数据及各游戏线程处理后反馈的数据包;IO请求管理线程为用于管理IO请求队列中的数据,用于分配游戏线程来处理客户端的请求;其中,用户在客户端向游戏服务器发送连接请求;IO请求管理线程随时监听IO请求队列,当发现IO请求队列中有请求数据包时,就读取该数据包;步骤102IO请求管理线程判断得到所读取的数据包为连接请求,则进一步通过判断该请求所属的游戏世界获得该请求欲连接的游戏线程组,并将该连接请求随机发送至该线程组中的线程上;其中,所述的游戏世界为系统初始化时将一个游戏分为的不同的几个部分,一个游戏线程组对应一个游戏世界,而每个线程组中的每个线程又分别处理所属游戏世界里对象,例如一个游戏包括A、B、C三幅地图,每一幅地图定义为一个游戏世界,设置三组游戏线程组,每个线程组分别对应一个游戏世界,而线程组中包括的线程处理对应游戏世界中的对象;步骤103接收到连接请求的线程处理该请求信息,建立客户端与服务器的连接;步骤104当IO请求管理线程读取到IO请求队列新的游戏逻辑请求时,判断得到该游戏逻辑所属的线程后,将该请求发送至该线程处理;步骤105接收游戏逻辑请求的线程处理完该请求后,将处理结果发送至IO请求队列,IO请求管理线程读取到该处理结果并将其反馈给客户端;其中,IO请求队列中新的游戏逻辑请求为客户端在与服务器完成连接后,客户端向服务器发送的新的游戏逻辑请求数据。
例如如果客户端向IO请求队列发送的属于游戏世界A的游戏逻辑请求数据,如果是连接请求数据,IO请求管理线程将判断出该请求数据属于游戏世界A,处理游戏世界A的线程组为游戏线程组a,则将该连接请求数据随机发送至该线程组中的线程上,例如线程1,由线程1建立客户端与服务器之间的连接,此后,IO请求队列接收到客户端发送的属于游戏世界A的新的游戏逻辑请求后,直接将该请求发送至线程1进行处理。
参见图2,为实现上述方法,本发明提供了一种基于多核CPU架构的网游服务器的数据分配系统,该系统包括数据接收存储单元、数据分配管理单元、;其中,数据接收存储单元201,用于接收并存储客户端发送的游戏逻辑请求数据,接收并存储处理完成的游戏逻辑请求数据;数据分配管理单元202,用于读取数据接收单元中的游戏逻辑请求数据,并通过判断该请求数据所属的游戏世界,获得处理该请求数据的对应的游戏线程组,将游戏逻辑请求数据随机发送至该游戏线程组中的线程上,读取数据接收存储单元中所处理完成的游戏逻辑请求数据,将处理完成的数据反馈给客户端;
其中,所述的游戏世界为系统初始化时将一个游戏分为的不同的几个部分,一个游戏线程组对应一个游戏世界,而每个线程组中的每个线程又分别处理所属游戏世界里的特定对象,例如一个游戏包括A、B、C三幅地图,每一幅地图定义为一个游戏世界,设置三组游戏线程组,每个线程组分别对应一个游戏世界,而线程组中包括的线程处理对应游戏世界中的特定对象;其中,每个游戏线程组又包括至少一个游戏线程,处理游戏世界中的对象,对被分配的游戏逻辑请求数据进行处理。
实施例二,前述的方法中,IO请求管理线程将接收到的客户端的连接请求数据发送至所判断得出的线程组中的随机的线程上,这有可能使得随后的数据分配中,某一线程的负载越来越重,使得该线程对所接收的请求数据的处理速度减慢,针对上述情况,本发明提供一种优化方法,在IO请求管理线程判断得出的线程组之后,进一步判断该线程组中负载最轻的线程,将客户端发送的连接请求数据发送至该负载最轻的线程上,该方法的具体流程如下步骤301IO请求队列(输入输出请求队列)接收客户端的连接请求,IO请求管理线程读取IO请求队列接收的该请求;其中,用户在客户端向游戏服务器发送连接请求;IO请求管理线程随时监听IO请求队列,当发现IO请求队列中有数据包时,就读取该数据包;步骤302IO请求管理线程判断得到所读取的数据包为连接请求,则进一步通过判断该请求所属的游戏世界获得该请求欲连接的游戏线程组;其中,所述的游戏世界为系统初始化时将一个游戏分为的不同的几个部分,一个游戏线程组对应一个游戏世界,而每个线程组中的每个线程又分别处理所属游戏世界里的特定对象,例如一个游戏包括A、B、C三幅地图,每一幅地图定义为一个游戏世界,设置三组游戏线程组,每个线程组分别对应一个游戏世界,而线程组中包括的线程处理对应游戏世界中的特定对象;步骤303IO请求管理线程读取欲连接的游戏线程组中各线程的负载标记位,并将客户端的连接请求发送至该线程组中负载最轻的线程中;
步骤304接收到连接请求的线程处理该请求信息,建立客户端与服务器的连接;步骤305当IO请求管理线程读取到IO请求队列新的游戏逻辑请求时,判断得到该游戏逻辑所属的线程后,将该请求发送至该线程处理;步骤306接收游戏逻辑请求的线程处理完该请求后,将处理结果发送至IO请求队列,IO请求管理线程读取到该处理结果并将其反馈给客户端;其中,IO请求队列中新的游戏逻辑请求为客户端在与服务器完成连接后,客户端向服务器发送的新的游戏逻辑请求数据。
例如如果客户端向IO请求队列发送的属于游戏世界A的游戏逻辑请求数据,如果是连接请求数据,IO请求管理线程将判断出该请求数据属于游戏世界A,则在处理游戏世界A的游戏线程组a中进一步选出线程a中负载最轻的线程1,将该连接请求数据发送至线程1,由所选择的线程1建立客户端与服务器之间的连接,此后,IO请求队列接收到客户端发送的属于游戏世界A的新的游戏逻辑请求后,直接将该请求发送至线程1进行处理。
为实现上述方法,本发明所提供的基于多核CPU架构的网游服务器的数据分配系统与实施例中的系统基本相同,不同之处仅在于数据分配管理单元,进一步用于获得处理该请求数据的对应的游戏线程组之后,进一步判断得到游戏线程组中的负载最轻的游戏线程,将游戏逻辑请求数据发送至该游戏线程;其余的结构和功能与实施例一中的系统中的完全一样。
实施例三,在IO请求管理线程将IO请求队列接收的客户端的游戏逻辑连接请求分配到负载最轻的游戏线程上处理,但在服务器接收到客户端发送的新的游戏逻辑请求数据后,该新的游戏逻辑请求数据会直接被分配到所连接的游戏线程来处理,这样同样可能会造成某些线程负载过重的情况,因此,本发明又提供了一种基于多核CPU架构的网游服务器的数据分配的优化方法,由服务器中的数据动态调配单元定时计算每个线程的负载程度,将负载较重的线程所连接的部分客户端连接到其它负载较轻的线程上,参见图4,该方法的具体流程如下步骤401IO请求队列(输入输出请求队列)接收客户端的连接请求,IO请求管理线程读取IO请求队列接收的该请求;其中,IO请求队列为用于存储客户端发送的请求数据及各游戏线程处理后反馈的数据包;IO请求管理线程为用于管理IO请求队列中的请求数据,用于分配游戏线程来处理客户端的请求;其中,用户在客户端登陆游戏时,向游戏服务器发送连接请求;IO请求管理线程随时监听IO请求队列,当发现IO请求队列中有数据包时,就读取该数据包;步骤402IO请求管理线程判断得到所读取的数据包为连接请求,则进一步通过判断该请求所属的游戏世界获得该请求欲连接的游戏线程组;其中,所述的游戏世界为系统初始化时将一个游戏分为的不同的几个部分,一个游戏线程组对应一个游戏世界,而每个线程组中的每个线程又分别处理所属游戏世界里的特定对象,例如一个游戏包括A、B、C三幅地图,每一幅地图定义为一个游戏世界,设置三组游戏线程组,每个线程组分别对应一个游戏世界,而线程组中包括的线程处理对应游戏世界中的特定对象;步骤403IO请求管理线程读取欲连接的游戏线程组中各线程的负载标记位,并将客户端的连接请求发送至该线程组中负载最轻的线程中;步骤404接收到连接请求的线程处理该请求信息,建立客户端与服务器的连接;步骤405当IO请求管理线程读取到IO请求队列新的游戏逻辑请求时,判断得到该游戏逻辑所属的线程后,将该请求发送至该线程处理;步骤406接收游戏逻辑请求的线程处理完该请求后,将处理结果发送至IO请求队列,IO请求管理线程读取到该处理结果并将其反馈给客户端;步骤407数据动态调配单元定时计算每个线程的负载程度,将负载较重的线程所连接的部分客户端连接到其它负载较轻的线程上;其中,数据动态调配单元可被预置计算每个线程负载程度发周期;其中,IO请求队列中新的游戏逻辑请求为客户端在与服务器完成连接后,客户端向服务器发送的新的游戏逻辑请求数据。
参见图5,为实现上述方法,本发明提供了一种实现该方法的系统,该系统与实施例一或实施例二中所提供的系统相比同样包括数据接收存储单元、数据分配管理单元,不同之处在于该系统还包括数据动态调配单元;其中,数据动态调配单元503,用于定时计算每个游戏线程组中的游戏线程的负载程度,将负载较重的游戏线程连接的至少一个客户端连接到其它负载较轻的游戏线程上;该系统的其余部分的功能以及相互之间的连接关系,与实施例一或实施例二中的系统完全相同。
实施例四,当玩家进入一个游戏世界后,从客户端登陆服务器,由IO请求管理线程将客户端连接到该游戏世界对应的游戏线程上,本发明在玩家想从一个游戏世界跨越到另一个游戏世界时,对基于多核CPU架构的网游服务器数据分配方法提供了一种优化方法,该方法步骤与实施例二大致相同,不同之处仅在于参见图6,该方法在实施例二的方法之上进一步包括步骤607IO请求队列接收客户端发送的跨越游戏线程的请求,IO请求管理线程读取到该请求后,将关于原来游戏世界的游戏逻辑请求数据,从原来连接的游戏线程发送到新的客户端欲跨越到达的新的游戏世界所属的游戏线程;其中,所述的跨越游戏线程的请求为客户端在欲跨越游戏世界时向服务器发送的游戏逻辑请求;其余的步骤和实施例二完全一样。
其中,实施例四中相对于实施例二所增加的步骤同样可以包括在实施例一或实施例三中所提供的方法之中,并且,该步骤只要在客户端与服务器建立连接后即可,并不限于上述方法中提到的位置。
为实现上述方法,所提供的系统与在前面所述的任一实施例中所提供的系统中的数据分配管理单元的功能相比,进一步包括判断得到从数据接收存储单元中所读取的游戏逻辑请求数据为跨越游戏线程组的请求时,将原来的游戏逻辑请求数据,从原来连接的游戏线程组发送到客户端欲跨越到的新的游戏世界所属的游戏线程组上;其中,所述的跨越游戏线程组的请求为客户端在欲跨越游戏世界时向服务器发送的游戏逻辑请求;该系统的其余部分和功能与前述实施例中的任一实施例所提供的的系统完全一样。
以上对本发明所提供的一种基于多核CPU架构的网游服务器的数据分配方法及系统进行了详细介绍,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种基于多核CPU架构的网游服务器的数据分配方法,其特在于,包括接收客户端发送的连接请求,判断得到该连接请求所属的游戏线程组后,并将该连接请求发送至该线程组中的线程上;接收连接请求的线程处理该请求,建立与客户端的连接;接收客户端新的游戏逻辑请求,将其发送至客户端所连接的线程处理。
2.根据权利要求1所述的基于多核CPU架构的网游服务器的数据分配方法,其特征在于判断得到接收的连接请求所属的游戏线程组后,进一步判断得到该线程组中负载最轻的线程,并将该连接请求发送至该线程上。
3.根据权利要求2所述的基于多核CPU架构的网游服务器的数据分配方法,其特征于,该方法进一步包括定时计算每个线程的负载程度,将负载较重的线程所连接的至少一个客户端连接到负载较轻的线程上。
4.根据权利要求1至3任一所述的基于多线程构架的网游服务器的数据分配方法,其特征在于,该方法进一步包括将线程完成的处理结果反馈至所连接的客户端。
5.根据权利要求1至3任一所述的基于多核CPU架构的网游服务器的数据分配方法,其特征在于,该方法进一步包括接收到客户端发送的跨越游戏线程的请求时,将原来游戏逻辑请求数据从原来连接的游戏线程发送到客户端欲跨越到达的新的游戏世界所属的游戏线程上。
6.一种基于多核CPU架构的网游服务器的数据分配系统,其特征在于,包括数据接收存储单元、数据分配管理单元;数据接收存储单元,用于接收并存储客户端发送的游戏逻辑请求数据;数据分配管理单元,用于读取数据接收单元中的游戏逻辑请求数据,并通过判断该请求数据所属的游戏世界,获得对应的处理该请求数据的游戏线程组,将游戏逻辑请求数据发送至该游戏线程组中的线程上。
7.根据权利要求6所述的基于多核CPU架构的网游服务器的数据分配系统,其特征在于数据分配管理单元在判断得到所接收的游戏逻辑请求数据所属的游戏线程组之后,进一步判断得到游戏线程组中的负载最轻的游戏线程,将游戏逻辑请求数据发送至该游戏线程。
8.根据权利要求7所述的基于多核CPU架构的网游服务器的数据分配系统,其特征在于,该系统还包括数据动态调配单元,用于定时计算每个游戏线程组中的游戏线程的负载程度,将负载较重的游戏线程所连接的部分客户端连接到其它负载较轻的游戏线程上。
9.根据权利要求6至8任一所述的基于多核CPU架构的网游服务器的数据分配系统,其特征在于数据接收存储单元的功能进一步包括接收并存储处理完成的游戏逻辑请求数据;数据分配管理单元的功能进一步包括读取数据接收存储单元中已处理完成的游戏逻辑请求数据,将处理完成的数据反馈给客户端。
10.根据权利要求6至8任一所述的基于多核CPU架构的网游服务器的数据分配系统,其特征在于,所述数据分配管理单元的功能进一步包括判断得到从数据接收存储单元中所读取的游戏逻辑请求数据为跨越游戏线程的请求时,将原来的游戏逻辑请求数据,从原来连接的游戏线程组发送到客户端欲跨越到的新的游戏世界所属的游戏线程组。
全文摘要
本发明提供了一种基于多核CPU架构的网游服务器的数据分配方法及系统,在多核CPU架构的网游服务器的基础上建立多组游戏线程,利用该系统,对客户端发送的游戏逻辑请求数据在不同的游戏线程上进行分配,从而发挥多核CPU运算能力优势,在单服务器的情况下有效提高运行效率,提高服务器的运算能力。
文档编号G06F19/00GK1945538SQ20061011411
公开日2007年4月11日 申请日期2006年10月27日 优先权日2006年10月27日
发明者刘思亮, 丘建荣 申请人:北京金山软件有限公司, 北京金山数字娱乐科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1