基于Golang开发框架开发游戏系统的方法、系统、装置和介质与流程


基于golang开发框架开发游戏系统的方法、系统、装置和介质
技术领域
1.本技术涉及计算机技术领域,特别是涉及基于golang开发框架开发游戏系统的方法、系统、装置和介质。


背景技术:

2.现今的服务框架开发采用的是c++语言,对开发人员要求较高,然而,开发效率却比较低,不便于进行线上热更新,存在单点服务的问题。此外,在对原有服务框架进行升级时,由于原有业务逻辑过多,服务逻辑复杂,无法一次性替换为新服务框架。例如,使用golang开发框架进行迭代替换时,会存在golang与c++服务跨语言数据交互的问题,这会导致原c++框架开发人员使用golang框架开发时,需要较长时间熟悉新框架结构,时间成本较高。
3.目前针对相关技术中,基于golang开发框架开发游戏系统时,存在的开发效率低、开发成本高的问题,尚未提出有效的解决方案。


技术实现要素:

4.本技术实施例提供了一种基于golang开发框架开发游戏系统的方法、系统、装置和介质,以至少解决相关技术中基于golang开发框架开发游戏系统时,存在的开发效率低、开发成本高的问题。
5.第一方面,本技术实施例提供了一种基于golang开发框架开发游戏系统的方法,所述方法包括:
6.获取主服务链接,并启动读协程和写协程,通过所述读协程获取主服务发送的数据,并根据自定义规则解析所述数据得到数据包和包头;
7.将所述数据包分发到对应消息队列通道中,并获取空闲的逻辑处理协程,通过所述逻辑处理协程对所述数据包进行逻辑处理,得到处理数据并实时存入redis或数据库中;
8.将所述处理数据返回给所述写协程,通过所述写协程将所述处理数据写入网络缓冲区,并发送给主服务。
9.在其中一些实施例中,在获取主服务链接之前,所述方法包括:
10.启动所述主服务,加载配置,并启动逻辑协程池和监听链接协程。
11.在其中一些实施例中,在通过所述逻辑处理协程对所述数据包进行逻辑处理之前,所述方法包括:
12.根据配置文件启动相应的逻辑处理协程,并根据哈希规则从所述redis或数据库中加载相应的所述逻辑处理协程处的节点数据;
13.启动cron定时器,通过所述cron定时器定时刷新逻辑。
14.在其中一些实施例中,所述根据自定义规则解析所述数据得到数据包和包头包括:
15.通过字节存储长度或字节存储消息是否加密的标记,解析所述数据得到所述数据
包和包头。
16.第二方面,本技术实施例提供了一种基于golang开发框架开发游戏系统的系统,所述系统包括:
17.获取解析模块,用于获取主服务链接,并启动读协程和写协程,通过所述读协程获取主服务发送的数据,并根据自定义规则解析所述数据得到数据包和包头;
18.逻辑处理模块,用于将所述数据包分发到对应消息队列通道中,并获取空闲的逻辑处理协程,通过所述逻辑处理协程对所述数据包进行逻辑处理,得到处理数据并实时存入redis或数据库中;
19.反馈模块,用于将所述处理数据返回给所述写协程,通过所述写协程将所述处理数据写入网络缓冲区,并发送给主服务。
20.在其中一些实施例中,所述系统还包括启动模块,在获取主服务链接之前,
21.所述启动模块,用于启动所述主服务,加载配置,并启动逻辑协程池和监听链接协程。
22.在其中一些实施例中,在通过所述逻辑处理协程对所述数据包进行逻辑处理之前,
23.所述逻辑处理模块,还用于根据配置文件启动相应的逻辑处理协程,并根据哈希规则从所述redis或数据库中加载相应的所述逻辑处理协程处的节点数据;
24.启动cron定时器,通过所述cron定时器定时刷新逻辑。
25.在其中一些实施例中,所述获取解析模块,还用于通过字节存储长度或字节存储消息是否加密的标记,解析所述数据得到所述数据包和包头。
26.第三方面,本技术实施例提供了一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的基于golang开发框架开发游戏系统的方法。
27.第四方面,本技术实施例提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面所述的基于golang开发框架开发游戏系统的方法。
28.相比于相关技术,本技术实施例提供的基于golang开发框架开发游戏系统的方法,获取主服务链接,并启动读协程和写协程,通过读协程获取主服务发送的数据,并根据自定义规则解析数据得到数据包和包头;接着,将数据包分发到对应消息队列通道中,并获取空闲的逻辑处理协程,通过该逻辑处理协程对数据包进行逻辑处理,得到处理数据并实时存入redis或数据库中;最后,将处理数据返回给写协程,通过写协程将处理数据写入网络缓冲区,并发送给主服务。
29.本技术将读写协程与逻辑协程分离,能提高开发效率;此外,本技术还能支持用户无感知热更新,兼容vc2005老版本c++开发的原有服务,有效降低学习成本,提高多核cpu利用率,解决了基于golang开发框架开发游戏系统时,存在的开发效率低、开发成本高的问题。
附图说明
30.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
31.图1是根据本技术实施例的基于golang开发框架开发游戏系统的工作流程示意图;
32.图2是根据本技术实施例的基于golang开发框架开发游戏系统的方法流程图;
33.图3是根据本技术实施例的基于golang开发框架开发游戏系统的系统结构框图;
34.图4是根据本技术实施例的另一种基于golang开发框架开发游戏系统的系统结构框图;
35.图5是根据本技术实施例的电子设备的内部结构示意图。
具体实施方式
36.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。基于本技术提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本技术公开的内容相关的本领域的普通技术人员而言,在本技术揭露的技术内容的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本技术公开的内容不充分。
37.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本技术所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
38.除非另作定义,本技术所涉及的技术术语或者科学术语应当为本技术所属技术领域内具有一般技能的人士所理解的通常意义。本技术所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本技术所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本技术所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本技术所涉及的“多个”是指大于或者等于两个。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。本技术所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
39.本实施例提供了一种基于golang开发框架开发游戏系统的方法,图1是根据本技术实施例的基于golang开发框架开发游戏系统的工作流程示意图,如图1所示,图2是根据本技术实施例的基于golang开发框架开发游戏系统的方法流程图,如图2所示,该流程包括如下步骤:
40.步骤s201,获取主服务链接,并启动读协程和写协程,通过读协程获取主服务发送的数据,并根据自定义规则解析数据得到数据包和包头;需要说明的是该主服务可以为客户端,也可以为服务端;
41.优选的,在获取主服务链接之前,需要启动主服务,加载配置,并启动逻辑协程池和监听链接协程。具体地,配置内容包括:运行模式(debug/release)、服务名称、服务id、日志路径、监听链接的端口/地址,以及主动链接的端口/地址,此外,还包括网络缓冲区数量、协程池大小、启动的逻辑模块和数据库地址等;
42.进一步地,获取主服务链接之后,对链接进行封装,并为此链接启动读协程和写协程,通过读协程获取主服务发送的数据,并根据自定义规则解析数据,得到数据包和包头。优选的,本实施例中通过字节存储长度或字节存储消息是否加密的标记等,解析数据,得到数据包和包头。便于兼容golang开发框架中已有的服务;
43.需要说明的是,本实施例中,读协程负责从网络缓冲区中读取主服务发送过来的消息并通过消息队列通道(channel)传递给逻辑处理协程池;写协程则负责将本服务产生的网络数据写入网络缓冲区并发送给其他服务,如图1中的ws世界服;
44.步骤s202,将数据包分发到对应消息队列通道中,并获取空闲的逻辑处理协程,通过逻辑处理协程对数据包进行逻辑处理,得到处理数据并实时存入redis或数据库中;
45.具体地,本实施例中,如图1所示,读协程将数据包分发到对应消息队列通道中,并获取空闲的逻辑处理协程,通过逻辑处理协程对数据包进行逻辑处理。
46.优选的,在通过逻辑处理协程对数据包进行逻辑处理之前,本实施例根据配置文件启动相应的逻辑处理协程,并根据哈希规则从redis或数据库中加载相应的逻辑处理协程处的节点数据;接着,启动cron定时器,通过cron定时器定时刷新逻辑,根据设定好的时间,定时执行逻辑。
47.进一步地,逻辑处理协程执行相应的业务逻辑得到处理后的数据,并将处理后的数据存入redis或数据库中。
48.需要说明的是,上述采用的是有状态模式进行逻辑处理,即服务中保存了用户的状态数据,在服务启动或者用户使用此服务提供的功能时,会从数据库中加载用户的相关数据并保存在此服务的内存中,其中,仅需从数据库中加载一次数据。而在用户产生其他的数据操作之后,原本的内存数据会发生修改,并会实时存入数据库中。因此,有状态模式的优点是:数据都保存在内存中,响应速度快。除此之外,本技术还能采用无状态模式进行逻辑处理,即服务的内存中不保留用户的状态数据,将数据存储于redis/memorycache等内存型存储服务中,在用户产生请求时,都从redis中拉取所需的数据,即每次都需要从数据库中获取需要的数据,因此,无状态模式的优点是:方便水平扩展,支持高可用。因此,本实施例可根据业务,通过综合考量性能和高可用性的需求,分别选择有状态模式或无状态模式;
49.步骤s203,将处理数据返回给写协程,通过写协程将处理数据写入网络缓冲区,并发送给主服务。
50.优选的,如图1所示,本实施例将处理后的数据返回给写协程,通过写协程将处理后的数据写入网络缓冲区,发送给ws世界服,然后发送给主服务,实现相应的数据指令指示,如游戏系统的热更新指示。
51.通过上述步骤s201至步骤s203,本实施例将读写协程与逻辑协程分离,能提高开发效率;此外,本技术实施例支持有状态、无状态两种模式,可提高服务水平扩展能力,支持用户无感知热更新;与此同时,本技术实施例通过自定义解析规则可兼容vc2005老版本c++开发的原有服务,有效降低学习成本,提高多核cpu利用率,解决了基于golang开发框架开
发游戏系统时,存在的开发效率低、开发成本高的问题。
52.在其中一些实施例中,开发框架不仅支持客户端模式,还支持服务端模式,使用服务端模式时,客户端服务主动连接服务端服务组成集群;使用客户端模式时,客户端服务连接其他服务组成集群。
53.需要说明的是,在上述流程中或者附图的流程图中示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
54.本实施例还提供了一种基于golang开发框架开发游戏系统的系统,该系统用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
55.图3是根据本技术实施例的基于golang开发框架开发游戏系统的系统结构框图,如图3所示,该系统包括获取解析模块31、逻辑处理模块32和反馈模块33:
56.获取解析模块31,用于获取主服务链接,并启动读协程和写协程,通过读协程获取主服务发送的数据,并根据自定义规则解析数据得到数据包和包头;逻辑处理模块32,用于将数据包分发到对应消息队列通道中,并获取空闲的逻辑处理协程,通过逻辑处理协程对数据包进行逻辑处理,得到处理数据并实时存入redis或数据库中;反馈模块33,用于将处理数据返回给写协程,通过写协程将处理数据写入网络缓冲区,并发送给主服务。
57.通过上述系统,本实施例将读写协程与逻辑协程分离,能提高开发效率;此外,本技术实施例支持有状态、无状态两种模式,可提高服务水平扩展能力,支持用户无感知热更新;与此同时,本技术实施例通过自定义解析规则可兼容vc2005老版本c++开发的原有服务,有效降低学习成本,提高多核cpu利用率,解决了基于golang开发框架开发游戏系统时,存在的开发效率低、开发成本高的问题。
58.在其中一些实施例中,系统还包括启动模块,图4是根据本技术实施例的另一种基于golang开发框架开发游戏系统的系统结构框图,如图4所示,该系统包括启动模块41、获取解析模块31、逻辑处理模块32和反馈模块33。启动模块41,用于启动主服务,加载配置,并启动逻辑协程池和监听链接协程。具体地,配置内容包括:运行模式(debug/release)、服务名称、服务id、日志路径、监听链接的端口/地址,以及主动链接的端口/地址,此外,还包括网络缓冲区数量、协程池大小、启动的逻辑模块和数据库地址等。
59.需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
60.此外,需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器中。
61.本实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
62.可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备
和上述处理器连接,该输入输出设备和上述处理器连接。
63.另外,结合上述实施例中的基于golang开发框架开发游戏系统的方法,本技术实施例可提供一种存储介质来实现。该存储介质上存储有计算机程序;该计算机程序被处理器执行时实现上述实施例中的任意一种基于golang开发框架开发游戏系统的方法。
64.在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于golang开发框架开发游戏系统的方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
65.在一个实施例中,图5是根据本技术实施例的电子设备的内部结构示意图,如图5所示,提供了一种电子设备,该电子设备可以是服务器,其内部结构图可以如图5所示。该电子设备包括通过内部总线连接的处理器、网络接口、内存储器和非易失性存储器,其中,该非易失性存储器存储有操作系统、计算机程序和数据库。处理器用于提供计算和控制能力,网络接口用于与外部的终端通过网络连接通信,内存储器用于为操作系统和计算机程序的运行提供环境,计算机程序被处理器执行时以实现一种基于golang开发框架开发游戏系统的方法,数据库用于存储数据。
66.本领域技术人员可以理解,图5中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
67.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
68.本领域的技术人员应该明白,以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
69.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护
范围。因此,本技术专利的保护范围应以所附权利要求为准。