发明内容
有鉴于此,本申请提供一种网络通信的方法,可以有效避免由于中心化的部署产生在大流量数据场景中网络通信的不稳定性,提高网络通信过程的可靠性及稳定性。
本申请第一方面提供一种网络通信的方法,包括:
下游网络设备通过第一代理节点获取至少两个并行的实体进程的路由信息,所述实体进程用于支持客户端的运行;
所述下游网络设备根据预设周期向所述上游网络设备发送心跳信息请求,所述心跳信息请求用于指示所述上游网络设备根据所述路由信息更新动态路由表;
所述下游网络设备接收所述上游网络设备反馈的心跳回复信息,所述心跳回复信息中包括更新后的所述动态路由表;
所述下游网络设备根据更新后的所述动态路由表与所述上游网络设备建立动态路由连接,以提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述下游网络设备通过第一代理节点获取至少两个并行的实体进程的路由信息,包括:
所述下游网络设备获取所述实体进程对应的双端实体标识;
所述下游网络设备根据所述双端实体标识生成内存键值,所述内存键值在同一所述下游网络设备中互斥;
所述下游网络设备根据所述内存键值获取关联的进程,以得到所述路由信息。
可选的,在本申请一些可能的实现方式中,所述方法还包括:
所述下游网络设备获取进程修改指令;
所述下游网络设备根据所述进程修改指令对对应的内存键值进行修改,以对所述路由信息进行更新。
可选的,在本申请一些可能的实现方式中,所述下游网络设备根据预设周期向所述上游网络设备发送心跳信息请求,包括:
所述下游网络设备建立监测进程,所述监测进程用于指示心跳信息;
若所述心跳信息满足预设条件,则所述下游网络设备生成所述心跳信息请求。
可选的,在本申请一些可能的实现方式中,所述方法还包括:
所述下游网络设备获取上游地址信息,所述上游地址信息用于指示候选上游网络设备;
所述下游网络设备尝试与所述候选上游网络设备建立连接,以确定满足接入条件的所述上游网络设备。
可选的,在本申请一些可能的实现方式中,所述方法还包括:
所述下游网络设备建立傀儡路由信息;
若所述下游网络设备确定了满足所述接入条件的所述上游网络设备,则根据所述傀儡路由信息更新所述路由信息。
可选的,在本申请一些可能的实现方式中,所述下游网络设备根据更新后的所述动态路由表与所述上游网络设备建立动态路由连接,以提供与所述客户端网络通信服务,包括:
所述下游网络设备确定更新后的所述动态路由表中的超时信息,以确定超时进程;
所述下游网络设备广播所述超时进程,以对所述路由信息进行更新;
所述下游网络设备根据更新后的所述路由信息与所述上游网络设备建立动态路由,以提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述方法还包括:
所述下游网络设备获取切换指令,所述切换指令用于指示容灾进程;
所述下游网络设备根据所述切换指令确定备份网络设备,以执行所述容灾进程。
可选的,在本申请一些可能的实现方式中,所述网络通信的方法应用于游戏服务,所述上游网络设备和所述下游网络设备为区块链设备,所述区块链设备为区块链中的节点设备。
本申请第二方面提供一种网络通信的装置,包括:获取单元,用于通过第一代理节点获取至少两个并行的实体进程的路由信息,所述实体进程用于支持客户端的运行;
发送单元,用于根据预设周期向所述上游网络设备发送心跳信息请求,所述心跳信息请求用于指示所述上游网络设备根据所述路由信息更新动态路由表;
接收单元,用于接收所述上游网络设备反馈的心跳回复信息,所述心跳回复信息中包括更新后的所述动态路由表;
通信单元,用于根据更新后的所述动态路由表与所述上游网络设备建立动态路由连接,以提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述获取单元,具体用于获取所述实体进程对应的双端实体标识;
所述获取单元,具体用于根据所述双端实体标识生成内存键值,所述内存键值在同一所述下游网络设备中互斥;
所述获取单元,具体用于根据所述内存键值获取关联的进程,以得到所述路由信息。
可选的,在本申请一些可能的实现方式中,所述获取单元,还用于获取进程修改指令;
所述获取单元,还用于根据所述进程修改指令对对应的内存键值进行修改,以对所述路由信息进行更新。
可选的,在本申请一些可能的实现方式中,所述发送单元,具体用于建立监测进程,所述监测进程用于指示心跳信息;
所述发送单元,具体用于若所述心跳信息满足预设条件,则生成所述心跳信息请求。
可选的,在本申请一些可能的实现方式中,所述获取单元,还用于获取上游地址信息,所述上游地址信息用于指示候选上游网络设备;
所述获取单元,还用于尝试与所述候选上游网络设备建立连接,以确定满足接入条件的所述上游网络设备。
可选的,在本申请一些可能的实现方式中,所述通信单元,还用于建立傀儡路由信息;
所述通信单元,还用于若确定了满足所述接入条件的所述上游网络设备,则根据所述傀儡路由信息更新所述路由信息。
可选的,在本申请一些可能的实现方式中,所述通信单元,具体用于确定更新后的所述动态路由表中的超时信息,以确定超时进程;
所述通信单元,具体用于广播所述超时进程,以对所述路由信息进行更新;
所述通信单元,具体用于根据更新后的所述路由信息与所述上游网络设备建立动态路由,以提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述通信单元,还用于获取切换指令,所述切换指令用于指示容灾进程;
所述通信单元,还用于根据所述切换指令确定备份网络设备,以执行所述容灾进程。
本申请第三方面提供一种网络通信的方法,包括:
上游网络设备通过第二代理节点接收所述下游网络设备发送的心跳信息请求,所述心跳信息请求中包括所述下游网络设备的路由信息;
所述上游网络设备根据所述路由信息更新动态路由表;
所述上游网络设备向所述下游网络设备发送更新后的所述动态路由表,以与所述上游网络设备建立动态路由;
所述上游网络设备基于所述动态路由提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述上游网络设备根据所述路由信息更新动态路由表,包括:
所述上游网络设备建立监听进程,所述监听进程用于指示所述心跳信息请求中的心跳信息;
若所述心跳信息满足预设条件,则所述上游网络设备根据所述路由信息更新动态路由表。
本申请第四方面提供一种网络设备,其特征在于,包括:
接收单元,用于通过第二代理节点接收下游网络设备发送的心跳信息请求,所述心跳信息请求中包括所述下游网络设备的路由信息;
更新单元,用于根据所述路由信息更新动态路由表;
发送单元,用于向所述下游网络设备发送更新后的所述动态路由表,以与所述上游网络设备建立动态路由;
通信单元,用于基于所述动态路由提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述更新单元,具体用于建立监听进程,所述监听进程用于指示所述心跳信息请求中的心跳信息;
所述更新单元,具体用于若所述心跳信息满足预设条件,则根据所述路由信息更新动态路由表。
本申请第五方面提供一种计算机设备,包括:存储器、处理器以及总线系统;所述存储器用于存储程序代码;所述处理器用于根据所述程序代码中的指令执行上述第一方面或第一方面任一项所述的网络通信的方法,或上述第三方面或第三方面任一项所述的网络通信的方法。
本申请第六方面提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面任一项所述的网络通信的方法,或上述第三方面或第三方面任一项所述的网络通信的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
通过下游网络设备获取实体进程的路由信息;然后下游网络设备根据预设周期向上游网络设备发送心跳信息请求并接收上游网络设备反馈的心跳回复信息,从而得到更新后的动态路由表,并根据更新后的动态路由表与上游网络设备建立动态路由,以提供与客户端网络通信服务。从而实现了路由信息的动态发现和建立,由于多层级的架构设置以及自动化集成信道,提高了消息的吞吐量并减少了人工参与度;且通过动态的更新网络设备间的路由信息,使得故障发生时可以迅速的重新部署新的路由,以实现可靠的网络通信过程,提高了网络通信的稳定性。
具体实施方式
本申请实施例提供了一种网络通信的方法以及相关装置,可以应用于终端设备中包含网络通信功能的系统或程序中,通过下游网络设备获取实体进程的路由信息;然后下游网络设备根据预设周期向上游网络设备发送心跳信息请求并接收上游网络设备反馈的心跳回复信息,从而得到更新后的动态路由表,并根据更新后的动态路由表与上游网络设备建立动态路由,以提供与客户端网络通信服务。从而实现了路由信息的动态发现和建立,由于多层级的架构设置以及自动化集成信道,提高了消息的吞吐量并减少了人工参与度;且通过动态的更新网络设备间的路由信息,使得故障发生时可以迅速的重新部署新的路由,以实现可靠的网络通信过程,提高了网络通信的稳定性。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“对应于”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,对本申请实施例中可能出现的一些名词进行解释。
Gobusd:用于游戏进程间建立通信信道的代理节点,可以进行通信消息转发的独立进程。
Gobus:实体进程间的共享内存的通信信道。
Entity:一种独立的游戏后台服务器进程实体。
EntityEnv:单独的一套游戏后台服务器进程实体集合,部署在同一物理环境(例如物理机,虚拟机)中,可以作为一种网络设备。
Golang:服务器实际实现所用的并行式编程语言。
Goroutine:golang语言中的轻量级线程。
传输控制协议(Transmission Control Protocol,TCP):一种面向连接的、可靠的、基于字节流的传输层通信协议,可以适应支持多网络应用的分层协议层次结构。
心跳报文:也称心跳信息,用于监视机器网络存储器的运行状态,心跳报文一次发送字符串信息表示网络存储器的运行状态,以广播或单播方式发送。
应理解,本申请提供的网络通信方法可以应用于终端设备中包含网络通信功能的系统或程序中,例如小游戏平台,具体的,网络通信系统可以运行于如图1所示的网络架构中,如图1所示,是网络通信系统运行的网络架构图,如图可知,网络通信系统可以提供与多个客户端的网络通信,终端通过网络建立与服务器的连接,进而与服务器进行信息交互,以实现通信进程的运行,例如:进行云游戏的加载并运行;可以理解的是,图1中示出了多种终端设备,在实际场景中可以有更多或更少种类的终端设备参与到网络通信的过程中,具体数量和种类因实际场景而定,此处不做限定,另外,图1中示出了一个服务器,但在实际场景中,也可以有多个服务器的参与,特别是在多内容应用交互的场景中,具体服务器数量因实际场景而定。
可以理解的是,上述网络通信系统可以运行于服务器,还可以作为运行于第三方设备以提供网络通信过程的优化,以得到客户端的网络通信处理结果;具体的网络通信系统可以是以一种程序的形式在上述设备中运行,也可以作为上述设备中的系统部件进行运行,还可以作为云端服务程序的一种,具体运作模式因实际场景而定,此处不做限定。
应当注意的是,本实施例中涉及的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
近年来,随着游戏产业规模的不断扩大,游戏玩家的人数,在线时长,游戏后台服务器所需要处理的并发事务的数量和复杂度不断增加,这给游戏后台的分布式服务框架以提供云游戏的运行提出了更高的可用性,可靠性和灵敏度要求。
云游戏(Cloud gaming)又可称为游戏点播(gaming on demand),是一种以云计算技术为基础的在线游戏技术。云游戏技术使图形处理与数据运算能力相对有限的轻端设备(thin client)能运行高品质游戏。在云游戏场景下,游戏并不在玩家游戏终端,而是在云端服务器中运行,并由云端服务器将游戏场景渲染为视频音频流,通过网络传输给玩家游戏终端。玩家游戏终端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体播放能力与获取玩家输入指令并发送给云端服务器的能力即可。
对此一般采用中央节点管理的游戏后台服务器架构,一般会在服务器部署中定义某一个/一组服务器进程作为中央节点服务器(Master Server),用于管理整个分布式服务器的通信和负载。在中央节点服务器的管理下,分布在不同物理机上的各个游戏进程协同工作,对游戏客户端提供游戏服务。
但是,中心化的部署方式会面临单点的瓶颈。即当游戏服务器逻辑复杂,消息吞吐量加大时,单点瓶颈将会显著提升,会造成可靠性的降低,影响网络通信的稳定性。
为了解决上述问题,本申请提出了一种网络通信的方法,该方法应用于图2所示的网络通信的系统框架中,如图2所示,为本申请实施例提供的一种网络通信的系统架构图,图中包括上游网络设备和游网络设备,其中,下游网络设备用于与客户端的信息交互,下游网络设备包括至少两个并行的实体进程,实体进程通过第一代理节点进行下游网络设备与上游网络设备的信息交互,上游网络设备用于通过第二代理节点与下游网络设备中的第一代理节点进行信息交互;在一种可能的场景中,下游网络设备和上游网络设备均代表一个EntityEnv,即部署在独立的物理环境中(物理机或者虚拟机)。连接代理(Connd)为游戏服务进程和客户端连接的代理,主要负责会话建立,保持和管理。共享信道(Gobus)为实体进程间通信用到的共享内存信道。
可以理解的是,由于EntityEnv中的实体进程都在相同物理环境中,采用共享内存的通信方式,效率高且可靠性高。另外,EntityEnv对外的通信,统一由代理节点(Gobusd)代理;具体的,Gobusd采取层级级联的方式,依次向上建立连接。Gobusd之间,通过心跳定期广播路由,在接收到上游或者下游的Gobusd路由消息后,动态更新路由消息,一个第一代理节点(下游Gobusd)有且仅有一个上游Gobusd,一个第二代理节点(上游Gobusd)可以有多个下游Gobusd。另外,业务进程可以为Relaysvr或Roomsvr,Relaysvr为游戏的后台业务进程;而Roomsvr是游戏逻辑业务服务进程。
上述系统架构通过EntityEnv内部静态配置化,以及Gobusd动态路由连接的方式,可以将整个服务器进行分布式部署。可以把业务按照区、域、集群等方式进行集中管理,模块之间以Gobusd作为通信代理,在配置上,屏蔽EntityEnv内部和外部的细节,实现分模块化管理。
应当注意的是,本申请以游戏进程为例进行说明,其他具有网络通信需求的程序形式也可以采用本申请提供的系统架构以及网络通信的方法。
可以理解的是,本申请所提供的方法可以为一种程序的写入,以作为硬件系统中的一种处理逻辑,也可以作为一种网络通信装置,采用集成或外接的方式实现上述处理逻辑。作为一种实现方式,该网络通信装置通过下游网络设备获取实体进程的路由信息;然后下游网络设备根据预设周期向上游网络设备发送心跳信息请求并接收上游网络设备反馈的心跳回复信息,从而得到更新后的动态路由表,并根据更新后的动态路由表与上游网络设备建立动态路由,以提供与客户端网络通信服务。从而实现了路由信息的动态发现和建立,由于多层级的架构设置以及自动化集成信道,提高了消息的吞吐量并减少了人工参与度;且通过动态的更新网络设备间的路由信息,使得故障发生时可以迅速的重新部署新的路由,以实现可靠的网络通信过程,提高了网络通信的稳定性。
结合上述系统架构,下面将对本申请中网络通信的方法进行介绍,请参阅图3,图3为本申请实施例提供的一种网络通信的方法的流程图,本申请实施例至少包括以下步骤:
301、下游网络设备通过第一代理节点获取实体进程的路由信息。
本实施例中,下游网络设备和上游网络设备可以是作为网络通信服务器中的计算机进程,即为程序写入;下游网络设备和上游网络设备也可以是第三方设备的接入,以实现对网络通信过程的优化。具体的,下游网络设备和上游网络设备可以是同一服务器中不同的计算机进程,也可以是同一进程的不同场景功能实现,具体方式因实际场景而定。
本实施例中,实体进程即为客户端程序运行的必要进程,结合图2所示的网络通信系统架构,实体进程可以通过下游网络设备中的connd进行接入,具体的包括会话的建立、保持以接入实体进程,并进一步的对实体进程可能的改变进行管理。另外,路由信息即为实体进程中对应的路径信息,即涉及的信道以及接口的集合。
具体的,由于下游网络设备(EntityEnv)中一般包含多个实体进程,为保证实体进程之间信息的一致性,本实施例通过第一代理节点(Gobus)对多个实体进程进行管理,即如图2中通过代理节点对不同业务进程的路由信息进行整合,并统一通过代理节点进行对外通信,从而保证路由信息的一致性与准确性。
可选的,路由信息可以采用模块化的配置方式,以实现快速的定位与获取。具体的,下游网络设备首先获取实体进程对应的双端实体标识,即实体进程涉及的实体ID;然后下游网络设备根据双端实体标识生成指示共享信道的内存键值,其中,由于本申请中采用共享内存信道的方式进行业务处理,故在同一EntityEnv下,下游网络设备的共享内存键值互斥;不同EntityEnv下,下游网络设备的共享内存键值可相同,从而保证了单一EntityEnv中资源占用的均衡性。进一步的,下游网络设备根据内存键值获取关联的进程,从而得到路由信息。
在一种可能的场景中,双端实体标识可以采用如表1所示的编辑方式:
表1实体标识与其含义的对应关系
|
保留 |
保留 |
功能区 |
标识区 |
标识 |
00000000 |
00000000 |
00000011 |
00000001 |
实例范围 |
0~255 |
0~255 |
0~255 |
0~255 |
其中,标识的逻辑采用点分十进制进行,具体的,对于高于16位的象限保留,以便于以后扩展集群;对于低位0-8位,即标识区(InstanceID),用于区分同一类进程的不同实例,最多可支持255个不同实例;对于低位8-16,即功能区(FuncType),用于区别进程的类别,具体的,可以规定1代表connd,2代表roomsvr,3代表gobusd,4代表relaysvr。通过对于实体进程的模块化表述方式,可以快速的确定对应的路由信息,从而可以提高网络通信过程的效率。
具体的,实体进程的标识化转换过程可以采用如下方式实现:
“ListenPort”:“{{_tag_x_LISTEN_PORT}}”,//监听端口
“UpstreamAddr”:“{{_tag_x_UP_ADDR}}”,//上游地址
“GoBusConn”:[
{%for businfoin_tag_gubus_list if_tag_x_entity_ID==businfo.entityID2%}//转换规则
{“ProcID”:“{{businfo.EntityID2}}”,//进程号
“DesProcID”:“{{businfo.EntityID1}}”//实体标识
}{%if loop.last%}{%else%},{%endif%}
{%endfor%}
]//代理节点接口
可以理解的是,上述标识的逻辑仅为示例,具体的数据表述形式或含义因实际场景而定,此处不做限定。
可选的,对于实体进程的模块化表述过程中,可能涉及实体进程的修改的过程,即添加、建立或删除的过程,此时,可以通过下游网络设备获取进程修改指令;然后下游网络设备根据进程修改指令对对应的内存键值进行修改,以对路由信息进行更新。即在需要修改实体进程时,仅需修改配置内存键值,通过键值转换工具生成对应的配置即可。然后通过控制键值转换工具,对游戏进程进行配置重载,即可完成EntityEnv内部的进程间通信信道的建立,添加和删除,从而实现了快速编辑进程的过程。
302、下游网络设备根据预设周期向上游网络设备发送心跳信息请求。
本实施例中,心跳信息请求即用于指示心跳信息,而通过心跳信息可以监视网络设备的运行状态。其中,预设周期可以是相关人员设定的,也可以是下游网络设备根据历史数据自动生成的,具体的方式因实际场景而定,此处不做限定。
可选的,为避免故障造成的业务服务终端,在发送心跳信息请求之前还可以进行心跳信息的监测进程。具体的,下游网络设备启动单独的goroutine轻量级线程模型进行读和写操作,同时建立到这些实体进程的路由信息;在读goroutine中,定时更新路由表的心跳超时,防止路有消息的过期回收。即判断心跳信息满足预设条件,例如:小于30ms;若满足则下游网络设备生成心跳信息请求,从而保证了心跳信息请求的正常发送,提高网络通信过程的可靠性。
在一种可能的场景中,下游网络设备在发送心跳信息请求之前还没有确定对应的上游网络设备,此时需要对多个上游网络设备进行筛选。具体的,下游网络设备通过获取上游地址信息,上游地址信息用于指示候选上游网络设备;然后下游网络设备尝试与候选上游网络设备建立连接,以确定满足接入条件的上游网络设备,例如:接入条件为尝试接入延时小于20ms;从而保证了上游网络设备的可靠性。
可选的,在接入合适的上游网络设备之前,下游网络设备中已经开始获取路由信息了,此时,为了保证信息的准确性,可以通过下游网络设备建立傀儡路由信息;当下游网络设备确定了满足接入条件的上游网络设备,则根据傀儡路由信息更新路由信息。即暂用一个傀儡路由信息代替真正的路由信息,并且暂不向上发送路由信息,在收到心跳回复,确认上游进程信息后,在同步更新路由表,进一步的保证了路由表的准确性。
303、上游网络设备更新动态路由表。
本实施例中,动态路由表即实例进程中涉及实例后台部分的进程同步过程,由于上游网络设备和下游网络设备是周期性同步的,故可以作为动态的更新过程,从而保证了路由信息的准确性。
可选的,上游网络设备在监听下游网络设备连接端口的同时,在有下游网络设备连接上来的情况下,建立独立的goroutine,进行读写双工通信。在收到下游网络设备心跳请求后,根据心跳附带的动态路由信息,更新自己的路由表。同时将自己的路由信息,附带在心跳回复包里,回复给下游。从而保证了路由表回复的可靠性。
304、上游网络设备向下游网络设备发送心跳回复信息。
本实施例中,上游网络设备在向下游网络设备发送心跳回复信息的同时,还可以建立监听线程对下游网络设备的运行状态进行监控,当出现运行异常时及时的终止心跳回复信息的发送,并生成对应的提醒。
可以理解的是,下游网络设备在接收到上游网络设备发送心跳回复信息之后,还可以对自身的动态路由表进行更新,即上游网络设备和下游网络设备各自维护自身的动态路由表,从而实现动态路由连接的过程。
305、上游网络设备和下游网络设备之间建立动态路由连接。
本实施例中,在建立动态路由连接之前,需要对心跳回复信息,即更新后的动态路由表中可能包含的异常指令进行判断。例如:动态路由表中包含超时信息,即指示某一进程处理超时,此时,下游网络设备需要广播该超时进程,并确定合适的切换信道,以对路由信息进行更新;然后下游网络设备根据更新后的路由信息与上游网络设备建立动态路由,以提供与客户端网络通信服务,从而实现了故障的快速处理过程。
可选的,上述实施例采用上下级级联时,只会连接单个上游网络设备,这可能会在最上层级联中产生单点风险,此时可以通过优化实现多个上游网络设备连接,即采取冗余策略,进行主备容灾。具体的,当下游网络设备获取到指示容灾进程切换指令时,下游网络设备根据切换指令确定备份网络设备,以执行容灾进程,即切换到可用的备份上游网络设备。
306、上游网络设备和下游网络设备为客户端提供网络通信服务。
本实施例中,通过动态发现和路由建立,以及多层级联的服务器架构,可用实现大规模分布式网络设备部署,降低配置复杂度,实现高可用的弹性游戏服务器框架;且对容灾,动态扩容,缩容友好;可以很好地应对网络通信的负载过程,从而提供例如云游戏的网络通信服务过程。
可以理解的是,在动态路由表更新的时候,即下游网络设备按照预设周期再次发送心跳信息请求之后,为客户端提供网络通信服务的过程会对应的进行更新。即动态路由表的维护与更新可以是循环的过程,从而实现基于动态路由连接的网络通信服务。
结合上述实施例可知,通过下游网络设备获取实体进程的路由信息;然后下游网络设备根据预设周期向上游网络设备发送心跳信息请求并接收上游网络设备反馈的心跳回复信息,从而得到更新后的动态路由表,并根据更新后的动态路由表与上游网络设备建立动态路由,以提供与客户端网络通信服务。从而实现了路由信息的动态发现和建立,由于多层级的架构设置以及自动化集成信道,提高了消息的吞吐量并减少了人工参与度;且通过动态的更新网络设备间的路由信息,使得故障发生时可以迅速的重新部署新的路由,以实现可靠的网络通信过程,提高了网络通信的稳定性。
上述实施例中介绍了上游网络设备与下游网络设备的交互过程,以及通过上游网络设备与下游网络设备的交互实现的动态路由表的维护,从而提高了网络通信的稳定性。
在一种可能的场景中,上游网络设备与下游网络设备可以是同一种设备,例如:Gobusd,即上述实施例中采用相同的Gobusd,通过将上游网络设备与下游网络设备的功能进行逻辑整合得到的网络设备。
具体的,该网络设备的功能逻辑可以参考图4,如图4所示,是本申请实施例提供的一种网络通信的方法的场景示意图。图中示出Gobusd的主要功能进程基于如下功能模块实现,包括:监听模块、上游连接模块、路由表模块以及通信模块;其中监听模块主要用户一次对下游的Gobusd进行TCP的连接尝试,在确定合适的下游Gobusd后进行心跳信息请求的发送,并建立对应的路由关系。
对于上游连接模块,主要是用于上游路由信息的注册,即登记标识的过程;以及向上游Gobusd发送消息,接收上游Gobusd发送的消息。
对于路由表模块,主要是用于路由表信息的写入及读取过程,进一步的根据写入的路由信息进行路由表的更新。
对于通信模块,主要是用于向上游发送心跳信息,即采用心跳信息请求的形式发送心跳信息。
通过上游网络设备与下游网络设备功能的整合,提高了网络通信系统内设备的灵活性,便于后续的统一管理。
上述实施例介绍了网络通信的过程,下面,结合从应用的执行全流程作为具体场景进行介绍,请参阅图5,图5为本申请实施例提供的另一种网络通信的方法的流程图,本申请实施例至少包括以下步骤:
501、动态路由连接的建立。
本实施例中,动态路由连接的建立的过程可以参考图3所述实施例的步骤301-305的描述,此处不做赘述。
502、应用进程初始化。
本实施例中,应用进程初始化的初始化即为了保证网络设备中上下游业务之间的通信是否稳定,具体设计逻辑业务进程(RoomState)、下游网络设备(Gobusd1)、下游网络设备(Gobusd2)、后端业务进程(Relaysvr)以及外部平台的通信连接尝试,其中外部平台可以是用于向网络设备提供一些应用局相关信息的应用平台。
可以理解的是,应用进程可以是游戏业务进程、视频业务进程、语音业务进程或会议业务进程,具体的应用形式因具体场景而定,此处不做限定。
503、创建应用进程。
本实施例中,创建应用进程主要涉及网络侧的信息交互,即通过外部平台获取应用相关信息,然后依次向Relaysvr、Gobusd2、Gobusd1以及RoomState发送应用相关信息,并依照上述顺序返回数据响应,从而完成创建应用的过程。
在一种可能的场景中,若应用为游戏,则创建应用进程的过程可以是创建游戏,例如:创建游戏房间、创建游戏副本等指定性的业务形式,并对相应的网络设备进行唤起并进行数据响应,保证游戏的正常进行。
504、运行应用进程。
本实施例中,在网络侧创建应用后,用户可以加入该应用,即通过客户端与RoomState进行信息交互即可。
505、结束应用进程。
本实施例中,结束应用的过程按照RoomState、Gobusd1、Gobusd2、Relaysvr以及外部平台依次响应,并逆序进行对应的数据更新,从而实现应用的全过程。
可以理解的是,在上述步骤501-502之后,503-505的过程可以循环进行,即在进行一次动态路由连接后,在该场景下可以继续进行多局应用。
结合上述实施例可见,通过利用结合局部静态配置的动态路由生成分布式应用服务器架构,实现了整套完整的应用后台服务器解决过程,利用Golang语言的并行特性,提升了后台的可用负载。Gobusd在大量并发环境下,能保持可用性和可靠性,并且在支持进程重载,增删,缩容扩容方面也有良好应用,保证不同场景下应用的高效稳定的运行,特别是在对延迟需求较高的游戏等场景中。
为了更好的实施本申请实施例的上述方案,下面还提供用于实施上述方案的相关装置。请参阅图6,图6为本申请实施例提供的一种网络通信装置的结构示意图,网络通信装置600包括:
获取单元601,用于通过第一代理节点获取至少两个并行的实体进程的路由信息,所述实体进程用于支持客户端的运行;
发送单元602,用于根据预设周期向所述上游网络设备发送心跳信息请求,所述心跳信息请求用于指示所述上游网络设备根据所述路由信息更新动态路由表;
接收单元603,用于接收所述上游网络设备反馈的心跳回复信息,所述心跳回复信息中包括更新后的所述动态路由表;
通信单元604,用于根据更新后的所述动态路由表与所述上游网络设备建立动态路由连接,以提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述获取单元601,具体用于获取所述实体进程对应的双端实体标识;
所述获取单元601,具体用于根据所述双端实体标识生成内存键值,所述内存键值在同一所述下游网络设备中互斥;
所述获取单元601,具体用于根据所述内存键值获取关联的进程,以得到所述路由信息。
可选的,在本申请一些可能的实现方式中,所述获取单元601,还用于获取进程修改指令;
所述获取单元601,还用于根据所述进程修改指令对对应的内存键值进行修改,以对所述路由信息进行更新。
可选的,在本申请一些可能的实现方式中,所述发送单元602,具体用于建立监测进程,所述监测进程用于指示心跳信息;
所述发送单元602,具体用于若所述心跳信息满足预设条件,则生成所述心跳信息请求。
可选的,在本申请一些可能的实现方式中,所述获取单元601,还用于获取上游地址信息,所述上游地址信息用于指示候选上游网络设备;
所述获取单元601,还用于尝试与所述候选上游网络设备建立连接,以确定满足接入条件的所述上游网络设备。
可选的,在本申请一些可能的实现方式中,所述通信单元604,还用于建立傀儡路由信息;
所述通信单元604,还用于若确定了满足所述接入条件的所述上游网络设备,则根据所述傀儡路由信息更新所述路由信息。
可选的,在本申请一些可能的实现方式中,所述通信单元604,具体用于确定更新后的所述动态路由表中的超时信息,以确定超时进程;
所述通信单元604,具体用于广播所述超时进程,以对所述路由信息进行更新;
所述通信单元604,具体用于根据更新后的所述路由信息与所述上游网络设备建立动态路由,以提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述通信单元604,还用于获取切换指令,所述切换指令用于指示容灾进程;
所述通信单元604,还用于根据所述切换指令确定备份网络设备,以执行所述容灾进程。
通过下游网络设备获取实体进程的路由信息;然后下游网络设备根据预设周期向上游网络设备发送心跳信息请求并接收上游网络设备反馈的心跳回复信息,从而得到更新后的动态路由表,并根据更新后的动态路由表与上游网络设备建立动态路由,以提供与客户端网络通信服务。从而实现了路由信息的动态发现和建立,由于多层级的架构设置以及自动化集成信道,提高了消息的吞吐量并减少了人工参与度;且通过动态的更新网络设备间的路由信息,使得故障发生时可以迅速的重新部署新的路由,以实现可靠的网络通信过程,提高了网络通信的稳定性。
本申请还提供另一种网络通信装置,请参阅图7,图7为本申请实施例提供的另一种网络通信装置的结构示意图,网络通信装置700包括:
接收单元701,用于通过第二代理节点接收下游网络设备发送的心跳信息请求,所述心跳信息请求中包括所述下游网络设备的路由信息;
更新单元702,用于根据所述路由信息更新动态路由表;
发送单元703,用于向所述下游网络设备发送更新后的所述动态路由表,以与所述上游网络设备建立动态路由;
通信单元704,用于基于所述动态路由提供与所述客户端网络通信服务。
可选的,在本申请一些可能的实现方式中,所述更新单元702,具体用于建立监听进程,所述监听进程用于指示所述心跳信息请求中的心跳信息;
所述更新单元702,具体用于若所述心跳信息满足预设条件,则根据所述路由信息更新动态路由表。
本申请实施例还提供了一种服务器,请参阅图8,图8是本申请实施例提供的一种服务器的结构示意图,该服务器800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)822(例如,一个或一个以上处理器)和存储器832,一个或一个以上存储应用程序842或数据844的存储介质830(例如一个或一个以上海量存储设备)。其中,存储器832和存储介质830可以是短暂存储或持久存储。存储在存储介质830的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器822可以设置为与存储介质830通信,在服务器800上执行存储介质830中的一系列指令操作。
服务器800还可以包括一个或一个以上电源826,一个或一个以上有线或无线网络接口850,一个或一个以上输入输出接口858,和/或,一个或一个以上操作系统841,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由图像渲染装置所执行的步骤可以基于该图8所示的计算机设备结构。
本申请实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有网络通信指令,当其在计算机上运行时,使得计算机执行如前述图2至图5所示实施例描述的方法中网络通信装置所执行的步骤。
本申请实施例中还提供一种包括网络通信指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如前述图2至图5所示实施例描述的方法中网络通信装置所执行的步骤。
本申请实施例还提供了一种网络通信系统,所述网络通信系统可以包含图6或图7所描述实施例中的网络通信装置,或者图8所描述的服务器。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,网络通信装置,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-onlymemory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
在一种可能的场景中,本申请中的网络通信的方法应用于区块链设备中,即权威DNS、LDNS或终端为区块链设备,且该区块链设备为区块链中的节点,下面结合附图进行说明;参见图9A所示的数据共享系统,数据共享系统900是指用于进行节点与节点之间数据共享的系统,该数据共享系统中可以包括多个节点901,多个节点901可以是指数据共享系统中各个客户端。每个节点901在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护该数据共享系统内的共享数据。为了保证数据共享系统内的信息互通,数据共享系统中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当数据共享系统中的任意节点接收到输入信息时,数据共享系统中的其他节点便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得数据共享系统中全部节点上存储的数据均一致。
对于数据共享系统中的每个节点,均具有与其对应的节点标识,而且数据共享系统中的每个节点均可以存储有数据共享系统中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至数据共享系统中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表2中仅以IP地址为例进行说明。
表2节点名称与节点标识的对应关系
数据共享系统中的每个节点均存储一条相同的区块链。区块链由多个区块组成,参见图9B,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有输入信息特征值、版本号、时间戳和难度值,区块主体中存储有输入信息;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的输入信息特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证了区块中输入信息的安全性。
在生成区块链中的各个区块时,参见图9C,区块链所在的节点在接收到输入信息时,对输入信息进行校验,完成校验后,将输入信息存储至内存池中,并更新其用于记录输入信息的哈希树;之后,将更新时间戳更新为接收到输入信息的时间,并尝试不同的随机数,多次进行特征值计算,使得计算得到的特征值可以满足下述公式:
SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET
其中,SHA256为计算特征值所用的特征值算法;version(版本号)为区块链中相关区块协议的版本信息;prev_hash为当前区块的父区块的区块头特征值;merkle_root为输入信息的特征值;ntime为更新时间戳的更新时间;nbits为当前难度,在一段时间内为定值,并在超出固定时间段后再次进行确定;x为随机数;TARGET为特征值阈值,该特征值阈值可以根据nbits确定得到。
这样,当计算得到满足上述公式的随机数时,便可将信息对应存储,生成区块头和区块主体,得到当前区块。随后,区块链所在节点根据数据共享系统中其他节点的节点标识,将新生成的区块分别发送给其所在的数据共享系统中的其他节点,由其他节点对新生成的区块进行校验,并在完成校验后将新生成的区块添加至其存储的区块链中。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。