CN111416849A - 断线重连方法、装置、***和计算机设备 - Google Patents
断线重连方法、装置、***和计算机设备 Download PDFInfo
- Publication number
- CN111416849A CN111416849A CN202010175673.6A CN202010175673A CN111416849A CN 111416849 A CN111416849 A CN 111416849A CN 202010175673 A CN202010175673 A CN 202010175673A CN 111416849 A CN111416849 A CN 111416849A
- Authority
- CN
- China
- Prior art keywords
- connection
- client
- game
- server
- session
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/131—Protocols for games, networked simulations or virtual reality
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/143—Termination or inactivation of sessions, e.g. event-controlled end of session
- H04L67/145—Termination or inactivation of sessions, e.g. event-controlled end of session avoiding end of session, e.g. keep-alive, heartbeats, resumption message or wake-up for inactive or interrupted session
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Cardiology (AREA)
- General Health & Medical Sciences (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请涉及一种断线重连方法、装置、***和计算机设备。所述方法包括:在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话;根据所述会话恢复第一连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到;触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。根据上述方案,在存在多条连接的情况下,通过进程间通信来同步客户端在多个Entity的重连状态,能有效保证不同游戏业务进程上玩家数据的同步。
Description
技术领域
本申请涉及网络连接技术领域,特别是涉及一种断线重连方法、装置、***和计算机设备。
背景技术
近年来,随着游戏产业规模的不断扩大,游戏玩家的人数、在线时长等均有增加。目前电子设备上运行的网络游戏在诸多情况下都会出现网络中断的情况,例如游戏闪退、接听电话、网络切换等,这时候就需要断线重连,以便让游戏应用程序运行更为顺畅。
在传统的游戏框架中,断线重连只考虑了单条连接的情况,即客户端与服务器中的一个Entity(独立的游戏后台服务器进程实体)连接。在复杂的实际应用场景中,可能会存在多条连接。在这种情况下,如果采用传统的单条连接的方式进行断线重连,可能导致不同Entity上的玩家数据不同步,导致内部数据错误(例如重复顶号、不能正常登陆等问题)。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本发明的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
基于此,有必要针对上述技术问题,提供一种能够在存在多条连接时有序对各条连接进行重连的断线重连方法、装置、***、计算机设备和存储介质。
一种断线重连方法,应用于服务端,所述方法包括:在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到;触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
一种断线重连方法,应用于客户端,所述方法包括:向服务端的连接管理进程发送断线重连请求,以触发所述服务端确定对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取;接收所述连接管理进程通过所述第一连接返回的所述连接地址;通过所述连接地址恢复所述第二连接。
一种断线重连装置,应用于服务端,所述装置包括:会话确定模块,用于在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话;第一连接恢复模块,用于根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;连接地址获取模块,用于若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到;第二连接恢复模块,用于触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
在一个实施例中,连接地址获取模块,还用于获取所述第一游戏业务进程通过通信信道从所述第二游戏业务进程中获取到的所述连接地址;所述通信信道包括共享内存和远程进程通信代理中的至少一项。
在一个实施例中,所述装置还包括:历史连接确定模块,用于根据所述会话确定与所述客户端对应的历史连接;所述历史连接为断线前所述第一游戏业务进程与所述客户端之间的连接;连接信息获取模块,用于获取所述历史连接对应的上行连接信息和下行连接信息;连接信息迁移模块,用于将所述上行连接信息和所述下行连接信息迁移至所述第一连接中;连接关闭模块,用于触发所述连接管理进程关闭所述历史连接。
在一个实施例中,所述装置还包括:会话新建模块,用于若所述会话不存在,则新建与所述客户端对应的会话;连接重建模块,用于通过新建的会话重新建立所述第一游戏业务进程与所述客户端之间的连接。
在一个实施例中,所述装置还包括:业务进程选择模块,用于在断线前,控制第一游戏业务进程通过负载均衡的方式从至少一个候选游戏业务进程中选择出所述第二游戏业务进程。
在一个实施例中,所述装置还包括:连接状态获取模块,用于获取历史连接状态;所述历史连接状态为所述客户端在断线前与所述至少一个候选游戏业务进程的连接状态;连接判断模块,用于根据所述历史连接状态确定是否存在所述第二连接。
在一个实施例中,所述装置还包括:心跳时间更新模块,用于若接收到所述客户端发送的心跳包,根据所述心跳包更新对应会话的心跳时间;所述心跳包由所述客户端定期发送;会话及状态处理模块,用于若设定时间段内未接收到所述客户端发送的心跳包,回收对应会话,并将对应的游戏账户设置为离线状态;所述游戏账户为所述客户端在所述服务端中注册的账户。
一种断线重连装置,应用于客户端,所述装置包括:重连请求发送模块,用于向服务端的连接管理进程发送断线重连请求,以触发所述服务端确定对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取;连接地址接收模块,用于接收所述连接管理进程通过所述第一连接返回的所述连接地址;连接恢复模块,用于通过所述连接地址恢复所述第二连接。
在一个实施例中,所述装置还包括:追帧请求发送模块,用于向所述服务端发送追帧请求;所述追帧请求用于触发所述服务端从至少一个数据帧中获取目标数据帧;所述至少一个数据帧为游戏应用程序在游戏战斗模式中符合预设条件的数据帧;上下文计算模块,用于接收所述服务端发送的所述目标数据帧,计算所述目标数据帧的上下文信息;状态信息获取模块,用于从所述服务端中获取所述游戏应用程序在当前时刻的状态信息;追帧重复模块,用于若所述上下文信息与所述状态信息不匹配,继续向所述服务端发送追帧请求,并重复计算上下文信息和获取状态信息的步骤,直到上下文信息与状态信息相匹配,恢复所述游戏战斗模式。
在一个实施例中,所述装置还包括:初始化请求发送模块,用于向所述服务端发送初始化请求;所述初始化请求用于触发所述服务端获取所述游戏应用程序的初始化信息;初始化模块,用于根据所述服务端返回的所述初始化信息进行初始化操作。
在一个实施例中,若所述服务端为所述游戏应用程序所在的服务器,则通过内部连接管理进程与所述服务器中的游戏业务进程进行通信;若所述服务端为外部平台,则通过外部连接代理进程与所述外部平台中的游戏业务进程进行通信;所述外部平***立于所述游戏应用程序所在的服务器。
一种断线重连***,所述***包括:服务端和客户端;所述服务端中包含有第一游戏业务进程、第二游戏业务进程和连接管理进程;所述客户端,用于向服务端的连接管理进程发送断线重连请求;所述连接管理进程,用于确定与所述客户端对应的会话,根据所述会话恢复第一连接;所述第一连接为所述第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;所述第一游戏业务进程,用于若确定存在待恢复的第二连接,从所述第二游戏业务进程中获取第二连接的连接地址;所述第二连接为所述第二游戏业务进程与所述客户端之间的连接;所述连接管理进程,还用于将所述连接地址通过所述第一连接返回给所述客户端;所述客户端,还用于通过所述连接地址恢复与所述第二连接。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到;触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到;触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到;触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:向服务端的连接管理进程发送断线重连请求,以触发所述服务端确定对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取;接收所述连接管理进程通过所述第一连接返回的所述连接地址;通过所述连接地址恢复所述第二连接。
上述断线重连方法、装置、***、计算机设备和存储介质,在发生断线时,客户端向连接管理进程发送断线重连请求,触发服务器恢复第一游戏业务进程与客户端之间的第一连接,通过该第一连接将第二游戏业务进程与客户端之间的连接地址返回给客户端,以恢复第二游戏业务进程与客户端之间的第二连接。在存在多条连接的情况下,通过进程间通信来同步客户端在多个Entity的重连状态,能有效保证不同游戏业务进程上玩家数据的同步。
附图说明
图1为一个实施例中断线重连方法的应用环境图;
图2为一个实施例中客户端的界面显示示意图;
图3为一个实施例中断线重连方法的流程示意图;
图4为另一个实施例中断线重连方法的应用环境图;
图5为另一个实施例中断线重连方法的流程示意图;
图6为再一个实施例中断线重连方法的流程示意图;
图7为一个实施例中断线重连方法的时序图;
图8为一个实施例中断线重连装置的结构框图;
图9为一个实施例中断线重连装置的结构框图;
图10为一个实施例中断线重连***的结构框图;
图11为一个实施例中计算机设备的内部结构图;
图12为另一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的断线重连方法,可以应用于如图1所示的应用环境中。该应用环境中包含有客户端101和服务端102,两者可以通过网络进行通信。其中,服务端包含有第一游戏业务进程、第二游戏业务进程以及连接管理进程。在游戏应用程序正常运行时,第一游戏业务进程通过连接管理进程与客户端连接(客户端还通过另一个连接管理进程与第二游戏业务进程连接,图1中未示出),另外,第一游戏业务进程与第二游戏业务进程可以进行通信。在发生网络断线时,客户端与连接管理进程之间的连接被切断,各个游戏业务进程无法与客户端进行正常通信(如图2所示,此时客户端界面上可以显示“正在重新连接……”的内容),此时需要进行断线重连,本发明实施例提供的断线重连方法,先恢复第一游戏业务进程与客户端之间的第一连接,进而根据第一连接恢复第二游戏业务进程与客户端之间的第二连接,在存在多条连接的情况下,能有效保证不同游戏业务进程上玩家数据的同步。
客户端101可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,客户端101中可以安装各种类型的游戏应用程序,服务端102可以是提供游戏应用程序的服务器(需要说明的是,本发明方法实施例中简称为“服务器”),也可以为外部平台(即服务器、客户端之外的第三端,此时客户端可以借助外部平台运行服务器中的游戏应用程序)。其中,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图3所示,提供了一种断线重连方法,应用于服务端,服务端可以通过C++、Golang(服务器实际实现所用的并行式编程语言)等语言开发得到。
该方法包括以下步骤:
S301、在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话。
其中,客户端上可以安装游戏应用程序或者可以访问网页游戏,进一步地,这些使用客户端的用户可以在这些游戏应用程序(可以包括***、网页游戏、网络游戏等)中注册并登录账号,通过所注册或登录的账号能够启动游戏应用程序。在某些实施例中,客户端也可以具体指游戏应用程序中登录的游戏账号。
服务端可以在后***立运行业务进程实体,这些业务进程实体可以称为Entity。进一步地,Entity的数量可以不止一个,例如,包括第一游戏业务进程和第二游戏业务进程。第一游戏业务进程可以指服务端中提供基础功能的业务进程,例如管理游戏大厅、房间的业务进程;第二游戏业务进程可以指服务端中提供的附加功能,例如管理副本、战斗状态的业务进程。
在某些实施例中,游戏业务进程还可以为外部平台中的游戏业务进程,可以将服务器中的游戏业务进程确定为前述第一游戏业务进程,将外部平台中的游戏业务进程确定为前述第二游戏业务进程,还可以反过来,将外部平台中的游戏业务进程确定为前述第一游戏业务进程,将游戏服务端中的游戏业务进程确定为前述第二游戏业务进程。另外,外部平台可以为微信平台、QQ平台等。该外部平台中的游戏业务进程断线重连的实现过程中与服务器中的游戏业务进程是一致的,例如:在断线重连过程中,先恢复客户端与外部平台中游戏业务进程之间的连接C,通过连接C恢复客户端与其他游戏业务进程之间的连接D。
连接管理进程可以指对服务端与客户端之间的连接关系的进程,可以是Connd,Connd为服务器中游戏进程实例之一,用于建立和保持客户端与服务器中游戏服务进程之间的连接,通过Gobus(进程间的共享内存通信信道)和Entity进行通信。另外,在存在外部平台时,连接管理进程可以指外部连接代理进程(Relaysvr),用于管理客户端与外部平台中的外部连接服务之间的消息通信,Relaysvr和服务器中的Entity通过进程间通信管道进行通信,另外,外部平台中的游戏业务进程与服务器中的游戏业务进程可以通过远程进程通信代理进行通信。进一步地,一个Connd可以和一个游戏业务进程对应,游戏业务进程和客户端的所有消息都可以通过连接层中的连接管理进程转发,游戏业务进程不和客户端直接通信。
会话指服务端对连接进行管理的数据结构和相关操作,是连接在上层Entity中的实际管理结构。在服务端收到Connd的通知(通知可以指断线重连请求,该请求中包含有客户端的标识信息)后,会根据客户端的标识信息去寻找连接对应的会话,如果会话存在,这说明这一条连接是断线重连(或者顶号),而会话能够对连接进行控制管理,因此服务端可以通过会话对连接对应的连接信息进行管理。
其中,断线重连可以指完全重连和部分重连。具体的,“完全重连”指客户端完全丢失游戏的上下文,无法获知游戏应用程序当前的状态,例如:杀进程重登、关机重启等;“部分重连”指客户端仍保留部分游戏上下文,例如网络闪断Wifi网络切换4G网络后的断线重连。
S302、根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接。
游戏可以是各种需要进行网络连接的游戏,游戏玩家(可以指在客户端中登录的游戏账户)在游戏闪退、接听电话、网络切换等情况下,会出现客户端与服务端的连接被切换的情况,这时候,如果游戏玩家需要继续进行游戏,则需要客户端与服务端重新建立连接,即实现断线重连,在完成断线重连后,客户端能够继续与服务端进行通信,进而可以恢复断线前的游戏状态(或者在客户端中恢复游戏应用程序在当前的状态,包括其他游戏玩家的状态等)。
连接是指客户端和服务端之间建立的端到端通信信道,具体可以指客户端与服务端中游戏业务进程的连接。另外,连接也可以不仅仅指端到端的连接,例如,可以通过连接管理进程将游戏业务进程和客户端连接起来。该连接可以为Websocket(基于http协议的应用层协议,用于游戏服务进程和客户端保持长连接)、TCP连接、可靠UDP连接等。具体的,第一连接指的是第一游戏业务进程与客户端之间的连接。在断线前,第一游戏业务进程与客户端之间会存在历史连接,断线时该历史连接被切断(主要是客户端与连接管理进程之间的连接被切断),此时就需要通过恢复客户端与连接管理进程之间的连接来恢复与各个游戏业务进程之间的连接。
本步骤的服务端在断线重连请求的触发下恢复第一连接,能够恢复第一游戏业务进程与客户端之间的通信。进一步地,恢复第一连接可以借助服务端中的处理器(可以独立于第一游戏业务进程、第二游戏业务进程以及连接管理进程)实现,也可以直接由连接管理进程实现。具体的,可以至少有以下两种实现方式:1、服务端中的处理器在接收到断线重连请求时,触发连接管理进程恢复第一游戏业务进程与客户端之间的连接;2、连接管理进程在接收到断线重连请求时,直接恢复第一连接。具体的,客户端在发送断线重连请求时,是通过一个新的连接L1发送的,连接管理进程在接收到断线重连请求时,根据该断线重连请求中包含的客户端标识信息确定对应的会话,从该会话中确定与该客户端对应的连接L2,L2是第一游戏业务进程与连接管理进程之间的连接,建立L1与L2之间的对应关系,在第一游戏业务进程通过L1发送与该客户端相关的信息时,连接管理进程可以通过L2进行发送,此时就恢复了第一游戏业务进程与客户端之间的连接。
S303、若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到。
其中,在游戏应用程序被启动后,第一游戏业务进程和第二游戏业务进程之间可以通过特定的通信信道进行通信,以实现帧同步。进一步地,假设第一游戏业务进程为Roomsvr,Roomsvr为服务器中的游戏进程实例之一,用于处理***事务,第二游戏业务进程为Battlesvr,Battlesvr为服务器中的游戏进程实例之一,用于处理战斗事务,玩家在进入副本或战斗中时客户端会与Battlesvr建立连接。Roomsvr和Battlesvr之间会通过通信信道进行通信,Roomsvr能够从Battlesvr中获知玩家在副本或战斗中的状态,同时能够获知Battlesvr与客户端的连接信息,该连接信息可以包括连接状态(是否断线等)、连接地址等。
如果第二游戏业务进程与客户端之间存在连接(即第二连接),此时就需要对第二连接进行恢复,而前述连接管理进程不是直接与第二游戏业务进程连接,因此连接管理进程中可能没有第二连接的连接地址。因此,需要获取第二连接的连接地址,而第一游戏业务进程可以通过与第二游戏业务进程的通信信道获取到第二连接的连接地址,基于此,连接管理进程就能获知第二连接的连接地址了。进一步地,连接地址可以为URL(统一资源定位***,uniform resource locator)等。
在某些实施例中,第一游戏业务进程和第二游戏业务进程均可以为至少一个。为方便描述,以下以一个第一游戏业务进程(第二游戏业务进程的数量不限定)为例进行说明。
本步骤中,第一游戏业务进程从第二游戏业务进程中获取第二连接的连接地址,不需要第二游戏业务进程与客户端进行通信,即在断线重连的过程中服务器只需要关注某一个游戏业务进程与客户端的连接情况,而不用多次地接收客户端发送的连接请求并进行连接切换等操作,基于此,可以屏蔽服务器的连接层管理和业务逻辑,做到迅速,无感知切换,让业务层(包括第一游戏业务进程和第二游戏业务进程)不关心连接层的切换细节。进一步地,在一些实施例中,第一连接可以称为主连接,相对应的,第二连接可以称为从属连接,从属连接依赖主连接进行恢复。
S304、触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
本步骤可以由服务器中的处理器或者第一游戏业务进程将连接地址返回给客户端。客户端在接收到连接地址后,能访问该连接地址进而实现与第二游戏业务进程之间的第二连接。
上述实施例提供的游戏的断线重连方法,在发生断线时,客户端向连接管理进程发送断线重连请求,通过连接管理进程恢复第一游戏业务进程与客户端之间的第一连接,通过该第一连接将第二游戏业务进程与客户端之间的连接地址返回给客户端,以恢复第二游戏业务进程与客户端之间的第二连接。在存在多条连接的情况下,通过进程间通信来同步客户端在多个Entity的重连状态,能有效保证不同游戏业务进程上玩家数据的同步。
在一个实施例中,所述获取所述第二连接的连接地址的步骤,包括:获取所述第一游戏业务进程通过通信信道从所述第二游戏业务进程中获取到的所述连接地址;所述通信信道包括共享内存和远程进程通信代理中的至少一项。
第一游戏业务进程可以通过通信信道获取第二游戏业务进程的连接信息,该连接信息可以包括第二游戏业务进程与各个客户端的连接状态(可以为连接或不连接)、连接地址、连接建立时间、连接断开时间等。
在服务端为游戏应用程序对应的服务器时,共享内存可以为Gobus,远程进程通信代理可以为Gobusd【跨机器RPC(远程过程调用)的通信代理】。图4为断线重连方法的一个应用场景,该场景中第一游戏业务进程Roomsvr和Battlesvr之间通过Gobusd进行通信,能够在Roomsvr和Battlesvr之间实时同步所连接客户端的游戏状态以及与客户端的连接信息,使得各个游戏业务进程上各个玩家状态的一致。其中,游戏状态可以指所有玩家在游戏应用程序中进行交互操作后形成的状态,可以是各个玩家所处的等级、位置(例如:游戏大厅中、房间中、副本中、战斗中等)、装备情况、玩家信息(阵营、英雄、血量等)、随机种子等等。
上述实施例中,第一游戏业务进程与第二游戏业务进程之间通过通信信道连接,在断线重连过程中,不需要与第二游戏业务进程连接的连接管理进程进行连接管理,由与第一游戏业务进程对应的连接管理进程来恢复第一连接,进而通过第一连接恢复第二连接,能减少客户端与游戏业务进程之间的通信成本,提高断线重连的效率。
在某些实施例中,战斗完成、玩家离线情况下,服务端的各个游戏业务进程间同步玩家连接状态。
在一个实施例中,在所述根据所述会话恢复第一连接的步骤之后,还包括:根据所述会话确定与所述客户端对应的历史连接;所述历史连接为断线前所述第一游戏业务进程与所述客户端之间的连接;获取所述历史连接对应的上行连接信息和下行连接信息;将所述上行连接信息和所述下行连接信息迁移至所述第一连接中;触发所述连接管理进程关闭所述历史连接。
其中,上行连接信息可以指客户端通过历史连接向服务器中游戏业务进程发送的信息,下行连接信息可以指服务器中游戏业务进程通过历史连接向客户端发送的信息。本实施例中将上下行连接信息都迁移至第一连接中,能有效恢复第一游戏业务进程与客户端之间的通信,同时保证第一游戏业务进程和客户端能方便地获知历史传输数据。
历史连接在断线时被切断,而之后客户端与游戏业务进程通过新的连接进行通信,历史连接就没有必要继续占用了,因此服务器可以对历史连接进行回收,以提高连接资源的利用率。进一步地,关闭历史连接的操作可以由服务器中的处理器执行。关闭历史连接的操作也可以由连接管理进程来执行,具体的,在确定存在会话时,Connd关闭原来的旧连接,用新连接替代,并且将上行和下行的消息迁移到新连接中。
进一步地,在一些实施例中,在恢复第二连接的过程中,Connd也可以在存在客户端与第二游戏业务进程对应会话的情况下,关闭原来的旧连接并实现上下行消息的迁移。
上述实施例在恢复新连接的情况下合理处理旧连接以及旧连接对应的消息,能有效恢复游戏业务进程与客户端之间的通信,实现有效的断线重连。
在一些实施例中,断线重连方法,还包括:若接收到所述客户端发送的心跳包,根据所述心跳包更新对应会话的心跳时间;所述心跳包由所述客户端定期发送;若设定时间段内未接收到所述客户端发送的心跳包,回收对应会话,并将对应的游戏账户设置为离线状态;所述游戏账户为所述客户端在所述服务端中注册的账户。具体的,客户端可以定期向服务端发送心跳包,服务器在接收到客户端的心跳包之后可以确定该客户端运行正常,可以对该客户端的心跳时间进行更新。另一方面,服务器可以实时监控各个客户端的心跳时间,确定其中较长时间没有更新的心跳时间,将这些心跳时间对应的会话进行清除处理,在会话被清除后,客户端与对应的游戏业务进程之间的连接被彻底切断,同时服务器将该客户端对应的玩家状态设置为离线状态。具体的,服务器在超时未接收到心跳包时触发相应的游戏逻辑,例如将玩家的状态设置为“离开房间”或者“战斗逃跑”。
在一些实施例中,如果会话被清除而客户端需要重新进入游戏,则需要重建建立会话,并通过该会话构建游戏业务进程与客户端之间的连接。进一步地,所述断线重连方法,还包括:若所述会话不存在,则新建与所述客户端对应的会话;通过新建的会话重新建立所述第一游戏业务进程与所述客户端之间的连接。
在重新建立第一游戏业务进程与所述客户端之间的连接后,如果服务器接收到客户端发送的需要连接第二游戏业务进程的请求时,可以选择第二游戏业务进程,并建立所选择的第二游戏业务进程与客户端之间的连接。
在构建新建的会话与第一连接的对应关系之后,游戏服务器可以通过新建的会话对第一连接进行管理,进而在第一连接出现故障时进行修复或者断线重连。
上述实施例提供的断线重连方法,在会话不存在时新建会话,能有效保证第一游戏业务进程与客户端之间的通信,进而保证断线重连的实现。
在一个实施例中,在断线前,所述方法还包括:控制第一游戏业务进程通过负载均衡的方式从至少一个候选游戏业务进程中选择出所述第二游戏业务进程。
其中,候选游戏业务进程可以为服务端中附加功能的业务进程,另外,一个功能可以对应有至少一个游戏候选业务进程。
可以由第一游戏业务进程来实现候选游戏业务进程的负载均衡,通过负载均衡的方式,能在游戏业务进程负载压力较大时尽心更合理分配,保证客户端的请求被及时响应。选择第二游戏业务进程的实现过程举例如下:第一游戏业务进程在接收到客户端发送的进入副本请求时,确定各个候选游戏业务进程的负载情况,从负载压力小的候选游戏业务进程中选择一个作为第二游戏业务进程。另一方面,第二游戏业务进程可以不止一个,因此,第二游戏业务进程可以根据客户端的进入战斗请求,从负载压力小的候选游戏业务进程中选择一个作为另一个第二游戏业务进程。此外,由于服务端所连接的客户端数量往往不止一个,因此可以分别根据这些客户端的请求为其分配第二游戏业务进程。
在一个实施例中,在所述若确定存在待恢复的第二连接,获取所述第二连接的连接地址的步骤之前,还包括:获取历史连接状态;所述历史连接状态为所述客户端在断线前与所述至少一个候选游戏业务进程的连接状态;根据所述历史连接状态确定是否存在所述第二连接。
本实施例实现的具体过程可以为:当连接已存在时,第一连接会告知客户端所处的游戏状态:例如游戏大厅中、房间中、副本中或者战斗中,根据玩家的游戏状态,判断客户端是否存在从属连接(例如玩家在副本或战斗中,则说明玩家已经在某个Battlesvr上,则存在从属连接,反之,如果在房间里,说明玩家还没有进入副本或战斗,此时从属连接不存在)。在存在从属连接时,获取从属连接对应的地址以促使客户端恢复与第二游戏业务进程之间的连接(例如:恢复副本中的游戏状态);在不存在从属连接时,则可以通过第一连接在客户端中恢复其在第一游戏业务进程中的游戏状态。
在某些实施例中,游戏玩家在断线前可能仅与第一游戏业务进程建立了连接,而没有与第二游戏业务进程建立连接,这时候就不会存在第二连接的连接地址。因此,本实施例在获取第二连接的连接地址之前先判断是否存在第二连接,若存在第二连接,则通过会话获取第二连接的连接地址,若不存在第二连接,则可以不进行连接地址的获取操作,而是通过第一连接恢复客户端的游戏状态。
上述实施例提供的游戏的断线重连方法,在确定存在从属连接时,获取从属连接的连接地址,进而促使客户端恢复从属连接。
在一个实施例中,所述获取第二连接的连接地址的步骤之后,还包括:将所述连接地址存储至共享内存和/或数据库中。
对于有存储的服务端,可以把客户端连接相关的数据存储到持久化存储中(例如数据库),以避免服务端状态丢失导致的断线重连失败。对无数据库的服务端,可以通过其他方式来保存与客户端的连接状态,例如共享内存等,防止服务端宕机导致的连接状态不同步。
在一个实施例中,若所述服务端为所述游戏应用程序所在的服务器,则通过内部连接管理进程与所述服务器中的游戏业务进程进行通信;若所述服务端为外部平台,则通过外部连接代理进程与所述外部平台中的游戏业务进程进行通信;所述外部平***立于所述游戏应用程序所在的服务器。外部平台中的游戏业务进程也可以称为外部连接服务。
其中,内部连接管理进程和游戏业务进程之间可以通过共享内存进行通信,外部连接代理进程与外部连接服务(包括与服务器中的游戏业务进程)之间可以通过进程间通信管道进行通信。
进一步地,在一个实施例中,断线重连方法的一个应用场景如图4所示,该应用场景中包括客户端、连接层以及游戏业务层。其中,客户端中包括用户使用的移动设备或者PC。服务端从上至下包括业务层和连接层。其中,业务层中包含有游戏业务进程,具体包括服务器中的Roomsvr、Battlesvr以及外部平台中的外部连接服务;连接层对服务端与客户端之间的连接进行管理,包括分别与Roomsvr、Battlesvr连接的Connd以及与外部连接服务连接的Relaysvr。Connd和游戏业务进程之间通过Gobus进行通信,Relaysvr与Roomsvr、Battlesvr以及外部连接服务之间可以通过进程间通信管道进行通信。Roomsvr和Battlesvr之间(包括与外部连接服务)通过Gobus或者Gobusd进行通信。
进一步地,如图4所示,Roomsvr可以提供以下功能:会话管理、服务器消息处理、房间列表、房间管理、负载均衡管理、状态同步(与Battlesvr的状态同步)、客户端消息处理;Battlesvr可以对副本***、战斗***进行管理,还能进行负载上报,以便Roomsvr通过负载均衡选择出合适的Battlesvr(Battlesvr的数量可能不止一个);外部连接服务可以提供以下功能:外部连接管理、负载均衡管理、消息中转(可以是Battlesvr与客户端之间消息的中转)、协议转换等(实现与服务器中协议的转换)。其中,外部连接服务提供的功能与Roomsvr类似,此时可以通过客户端与外部连接服务之间的主连接恢复客户端与Battlesvr之间的从属连接,同时,外部连接服务也能通过负载均衡的方式选择出合适的Battlesvr。
在一个实施例中,提供一种断线重连方法,应用于客户端,如图5所示,所述方法包括:
S501、向服务端的连接管理进程发送断线重连请求,以触发所述服务端确定对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取。
S502、接收所述连接管理进程通过所述第一连接返回的所述连接地址。
S503、通过所述连接地址恢复所述第二连接。
本实施例提供的断线重连方法,为从客户端的角度实现的断线重连方法,具体术语解释以及实现方法可以参见前述服务端角度的断线重连方法。在此不再赘述。该断线重连方法,在存在多条连接的情况下,通过进程间通信来同步客户端在多个Entity的重连状态,能有效保证不同游戏业务进程上玩家数据的同步。
在一个实施例中,在所述通过所述连接地址恢复所述第二连接的步骤之后,还包括:向所述服务端发送追帧请求;所述追帧请求用于触发所述服务端从至少一个数据帧中获取目标数据帧;所述至少一个数据帧为游戏应用程序在游戏战斗模式中符合预设条件的数据帧;接收所述服务端发送的所述目标数据帧,计算所述目标数据帧的上下文信息;从所述服务端中获取所述游戏应用程序在当前时刻的状态信息;若所述上下文信息与所述状态信息不匹配,继续向所述服务端发送追帧请求,并重复计算上下文信息和获取状态信息的步骤,直到上下文信息与状态信息相匹配,恢复所述游戏战斗模式。
其中,游戏战斗模式可以指游戏应用程序中玩家之间或者玩家与游戏内角色处于打斗状态的模式。游戏战斗模式往往通过独立的进程来进行控制,此时客户端与服务端中的进程就会存在多条连接,因此,在发生断线时,就需要对这多条连接都进行断线重连。
另外,游戏战斗模式往往会采用帧同步技术,即服务器并不会参与完整的逻辑计算过程,而只是保存关键数据,作为多个客户端同步的中继转发节点和仲裁节点。因此,数据帧是游戏战斗数据的集合,也可以称为战斗帧,可以包括玩家状态、玩家操作等。符合预设条件的数据帧可以为游戏应用程序中的关键帧,可以是某些关键时刻(例如:玩家等级发生变化)的数据帧。目标数据帧可以包含有其相邻帧的相关信息。
对于帧同步的战斗,客户端就不能获知服务器当前的数据帧是怎样的,因此,需要通过追帧实现与服务器中数据帧的同步。可以分离游戏的***接入逻辑和战斗逻辑,具体的,客户端可以通过第二连接向服务器中的第二游戏业务进程发送追帧请求,以获取对应的战斗帧,进而恢复客户端中的战斗状态。进一步地,目前主要对战斗采取了帧同步,因此可以仅对战斗进程进行追帧,而其他的进程可以按照正常的方法恢复游戏状态(例如:从服务器中获取当前的数据帧,根据该数据帧在客户端的界面上显示对应的游戏信息,以恢复其游戏状态)。
游戏应用程序根据客户端的交互操作会在生成不断切换的数据帧,进而形成动态视频的形式,目标数据帧为游戏应用程序中的部分数据帧的数据,而客户端要恢复游戏状态就需要与服务器中当前的数据帧进行同步,因此客户端中仅仅有目标数据帧对应的数据帧是不够的,还需要获取其前面或者后面时刻的数据帧,这样才能判断是否与客户端同步。其中,前面或者后面时刻的数据帧即为上下文。进一步地,目标数据帧中可以包含有其相邻数据帧的描述信息,特定的帧运算算法根据目标帧以及该描述信息就可以计算出上下文信息。
进一步地,对于客户端追帧,如果帧同步数据量过大,可以考虑用一些战斗快照的方式,存储阶段性战斗数据,减少客户端断线重连的开销,降低断线重连需要的等待时间。更进一步地,战斗快照直接保留阶段性的战斗细节,就可以不用每帧都追,例如每1000帧有一个快照,那么如果需要追帧到5122帧,可以从5000帧获取5个快照,之后只需要从5000帧的快照开始向后追122帧,这样的处理方式能极大地缩短客户端恢复游戏状态的时间。
上述实施例,在帧同步游戏局内,玩家通过逐步追帧的方式,同步到战斗的即时上下文,顺畅地切换到当前游戏局中继续游戏,能有效提高游戏应用程序在客户端运行的流畅性,提高用户的体验。
在一个实施例中,所述向所述服务端发送追帧请求的步骤之前,还包括:向所述服务端发送初始化请求;所述初始化请求用于触发所述服务端获取所述游戏应用程序的初始化信息;根据所述服务端返回的所述初始化信息进行初始化操作。
具体的,客户端要恢复当前战斗上下文,需要向服务器请求所有关键帧的数据并运行复盘关键帧运算。客户端追帧时,首先向服务器请求战斗的初始化信息,例如玩家信息(阵营、英雄、初始血量等)、随机种子等,然后按序号依次追帧。因为一局游戏的数据量较大(可能有5Mb以上),所以采用逐步追帧的方式,每次向服务器发起请求,只请求部分帧,计算完后,再请求下一批数据帧。如此循环,直到与服务器状态同步。通过这种逐步追帧的方式,实现战斗重回。
上述实施例提供的游戏的断线重连方法,可以适用于帧同步游戏框架,提供逐步追帧的技术方案,让客户端可以模拟复盘整个游戏过程,服务器只用存储关键的数据帧,而不用完全模拟整个战斗过程。
在一个实施例中,提供一种断线重连方法,如图6所示,在不考虑外部平台的情况下包括以下步骤:
S601、客户端向服务器的连接管理进程发送断线重连请求。
S602、连接管理进程在断线重连请求的触发下确定与客户端对应的会话,根据会话恢复第一游戏业务进程与客户端之间的第一连接。
S603、连接管理进程根据会话确定断线前第一游戏业务进程与客户端之间的历史连接,获取历史连接对应的上行连接信息和下行连接信息,将上行连接信息和下行连接信息迁移至第一连接中,关闭历史连接。
S604、获取客户端在断线前与候选游戏业务进程之间的历史连接状态,根据历史连接状态确定是否存在第二连接。
S605、若确定不存在第二连接,根据第一连接恢复客户端中的第一连接对应的游戏流程。
S606、若确定存在第二连接,第一游戏业务进程通过通信信道从第二游戏业务进程中获取第二连接的连接地址。
S607、连接管理进程将连接地址通过第一连接返回给客户端。
S608、客户端通过连接地址恢复第二连接。
S609、客户端通过第二连接向服务器发送追帧请求,接收服务器发送的目标数据帧并计算目标数据帧的上下文信息。
S610、客户端从服务器中获取游戏应用程序在当前时刻的状态信息。
S611、若上下文信息与状态信息不匹配,客户端继续向服务器发送追帧请求,并重复计算上下文信息和获取状态信息的步骤,直到上下文信息与状态信息相匹配,恢复游戏战斗模式对应的游戏流程。
本申请还提供一种应用场景,该应用场景应用上述的断线重连方法。该应用场景不考虑外部平台,如图7所示,该断线重连方法在该应用场景的应用如下:
a)游戏客户端(简称为客户端)、Roomsvr以及Battlesvr分别初始化,Roomsvr以及Battlesvr实时监听客户端发送的连接请求(在断线的情况下即为断线重连请求)。
b)会话与连接保持
客户端发起Websocket连接请求到Connd,Connd将这条长连接纳入连接管理之中,同时告知服务器中的游戏业务进程有一条新的客户端连接上来。游戏业务进程收到Connd的通知后,去寻找主连接(客户端与Roomsvr的连接)对应的会话。如果会话存在,游戏业务进程会通知Connd,Connd恢复客户端与Roomsvr的主连接,此时Connd关闭原来的旧连接,用新连接替代,并且将上行和下行的消息迁移到新连接中;如果会话不存在,此时会新建一个会话并且建立会话与连接的对应关系(即客户端重新登录到服务器中)。
c)多连接重连以及战斗追帧
Roomsvr确定客户端所处的游戏状态,根据游戏状态确定是否存在从属连接,并向客户端应答从属连接信息。
如果存在从属连接,则从属连接信息中可以包含有从属连接的地址。客户端获取从属连接的连接地址,通过连接地址连接到Battlesvr,向Battlesvr发起追帧协议。不断重复追帧过程,直到客户端与服务器相同,此时,断线重连完成,进入正常的游戏流程。
如果不存在从属连接,则从属连接信息中可以为指示不存在从属连接的信息。此时,客户端可以进入正常的游戏流程。
在整个游戏过程中,随着玩家游戏状态的变化,Roomsvr和Battlesvr会实时同步玩家的连接情况,以保证不同连接上,玩家的状态一致。如果出现不一致的情况,则以主连接的状态作为仲裁标准。
对上述实施例进行实际测试,模拟多种情况,例如切换网络、断网恢复、设备顶号、杀端重连等。从测试结果可以发现,本发明实施例提供的断线重连方法都能实现完整的断线重连,让客户端可以在短时间内(最长数秒内,主要时间花费在客户端的资源加载上)重新回到房间里。对于业务逻辑,模拟了游戏大厅、游戏房间、战斗副本、实际战斗等多种情况,同时,对于有无从属连接的情况,都进行了模拟测试,经检验,本发明实施例提供的断线重连方法都能正常、高效地工作,实现客户端的完整重连,保证游戏体验顺畅,可以适用于多种游戏业务场景。具有可靠性、高效性,并且具有可扩展性和可移植性,可以运用到多种游戏服务器断线重连问题解决中。
另外,传统技术中主要采用TCP长连接,游戏服务器采用C++或者其他编程语言,无法很好地移植到基于Golang开发、通过Websocket协议建立连接的游戏服务器,而本发明实施例提供的断线重连方法能够很好地应用在这种场景下。
应该理解的是,虽然图3/5/6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3/5/6中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于与上述实施例中的断线重连方法相同的思想,本发明还提供断线重连装置,该装置可用于执行上述断线重连方法。为了便于说明,断线重连装置实施例的结构示意图中,仅仅示出了与本发明实施例相关的部分,本领域技术人员可以理解,图示结构并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
在一个实施例中,如图8所示,提供了一种断线重连装置800,应用于服务端,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:会话确定模块801、第一连接恢复模块802、连接地址获取模块803和第二连接恢复模块804,其中:
会话确定模块801,用于在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话。
第一连接恢复模块802,用于根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接。
连接地址获取模块803,用于若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到。
第二连接恢复模块804,用于触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
上述实施例提供的断线重连装置,在发生断线时,客户端向连接管理进程发送断线重连请求,通过连接管理进程恢复第一游戏业务进程与客户端之间的第一连接,通过该第一连接将第二游戏业务进程与客户端之间的连接地址返回给客户端,以恢复第二游戏业务进程与客户端之间的第二连接。在存在多条连接的情况下,通过进程间通信来同步客户端在多个Entity的重连状态,能有效保证不同游戏业务进程上玩家数据的同步。
在一个实施例中,连接地址获取模块,还用于获取所述第一游戏业务进程通过通信信道从所述第二游戏业务进程中获取到的所述连接地址;所述通信信道包括共享内存和远程进程通信代理中的至少一项。
在一个实施例中,所述装置还包括:历史连接确定模块,用于根据所述会话确定与所述客户端对应的历史连接;所述历史连接为断线前所述第一游戏业务进程与所述客户端之间的连接;连接信息获取模块,用于获取所述历史连接对应的上行连接信息和下行连接信息;连接信息迁移模块,用于将所述上行连接信息和所述下行连接信息迁移至所述第一连接中;连接关闭模块,用于触发所述连接管理进程关闭所述历史连接。
在一个实施例中,所述装置还包括:会话新建模块,用于若所述会话不存在,则新建与所述客户端对应的会话;连接重建模块,用于通过新建的会话重新建立所述第一游戏业务进程与所述客户端之间的连接。
在一个实施例中,所述装置还包括:业务进程选择模块,用于在断线前,控制第一游戏业务进程通过负载均衡的方式从至少一个候选游戏业务进程中选择出所述第二游戏业务进程。
在一个实施例中,所述装置还包括:连接状态获取模块,用于获取历史连接状态;所述历史连接状态为所述客户端在断线前与所述至少一个候选游戏业务进程的连接状态;连接判断模块,用于根据所述历史连接状态确定是否存在所述第二连接。
在一个实施例中,所述装置还包括:心跳时间更新模块,用于若接收到所述客户端发送的心跳包,根据所述心跳包更新对应会话的心跳时间;所述心跳包由所述客户端定期发送;会话及状态处理模块,用于若设定时间段内未接收到所述客户端发送的心跳包,回收对应会话,并将对应的游戏账户设置为离线状态;所述游戏账户为所述客户端在所述服务端中注册的账户。
在一个实施例中,如图9所示,提供一种断线重连装置900,应用于客户端,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:重连请求发送模块901、连接地址接收模块902和连接恢复模块903,其中:
重连请求发送模块901,用于向服务端的连接管理进程发送断线重连请求,以触发所述服务端确定对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取。
连接地址接收模块902,用于接收所述连接管理进程通过所述第一连接返回的所述连接地址。
连接恢复模块903,用于通过所述连接地址恢复所述第二连接。
上述实施例提供的断线重连装置,在发生断线时,客户端向连接管理进程发送断线重连请求,通过连接管理进程恢复第一游戏业务进程与客户端之间的第一连接,通过该第一连接将第二游戏业务进程与客户端之间的连接地址返回给客户端,以恢复第二游戏业务进程与客户端之间的第二连接。在存在多条连接的情况下,通过进程间通信来同步客户端在多个Entity的重连状态,能有效保证不同游戏业务进程上玩家数据的同步。
在一个实施例中,所述装置还包括:追帧请求发送模块,用于向所述服务端发送追帧请求;所述追帧请求用于触发所述服务端从至少一个数据帧中获取目标数据帧;所述至少一个数据帧为游戏应用程序在游戏战斗模式中符合预设条件的数据帧;上下文计算模块,用于接收所述服务端发送的所述目标数据帧,计算所述目标数据帧的上下文信息;状态信息获取模块,用于从所述服务端中获取所述游戏应用程序在当前时刻的状态信息;追帧重复模块,用于若所述上下文信息与所述状态信息不匹配,继续向所述服务端发送追帧请求,并重复计算上下文信息和获取状态信息的步骤,直到上下文信息与状态信息相匹配,恢复所述游戏战斗模式。
在一个实施例中,所述装置还包括:初始化请求发送模块,用于向所述服务端发送初始化请求;所述初始化请求用于触发所述服务端获取所述游戏应用程序的初始化信息;初始化模块,用于根据所述服务端返回的所述初始化信息进行初始化操作。
在一个实施例中,若所述服务端为所述游戏应用程序所在的服务器,则通过内部连接管理进程与所述服务器中的游戏业务进程进行通信;若所述服务端为外部平台,则通过外部连接代理进程与所述外部平台中的游戏业务进程进行通信;所述外部平***立于所述游戏应用程序所在的服务器。
关于断线重连装置的具体限定可以参见上文中对于断线重连方法的限定,在此不再赘述。上述断线重连装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供一种断线重连***,如图10所示,所述***包括:服务端1010和客户端1020;所述服务端中包含有第一游戏业务进程1011、第二游戏业务进程1012和连接管理进程1013;所述客户端,用于向服务端的连接管理进程发送断线重连请求;所述连接管理进程,用于确定与所述客户端对应的会话,根据所述会话恢复第一连接;所述第一连接为所述第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;所述第一游戏业务进程,用于若确定存在待恢复的第二连接,从所述第二游戏业务进程中获取第二连接的连接地址;所述第二连接为所述第二游戏业务进程与所述客户端之间的连接;所述连接管理进程,还用于将所述连接地址通过所述第一连接返回给所述客户端;所述客户端,还用于通过所述连接地址恢复与所述第二连接。
上述实施例提供的断线重连***,在发生断线时,客户端向连接管理进程发送断线重连请求,连接管理进程恢复第一游戏业务进程与客户端之间的第一连接,通过该第一连接将第二游戏业务进程与客户端之间的连接地址返回给客户端,客户端根据连接地址恢复与第二游戏业务进程之间的第二连接。在存在多条连接的情况下,通过进程间通信来同步客户端在多个Entity的重连状态,能有效保证不同游戏业务进程上玩家数据的同步。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,具体的,可以为前述实施例中的服务端,其内部结构图可以如图11所示。该计算机设备包括通过***总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的数据库用于存储连接地址等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种断线重连方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,具体的,可以为前述实施例中的客户端,其内部结构图可以如图12所示。该计算机设备包括通过***总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种断线重连方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图11和12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种断线重连方法,应用于服务端,所述方法包括:
在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话;
根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;
若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到;
触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
2.根据权利要求1所述的方法,其特征在于,所述获取所述第二连接的连接地址的步骤,包括:
获取所述第一游戏业务进程通过通信信道从所述第二游戏业务进程中获取到的所述连接地址;所述通信信道包括共享内存和远程进程通信代理中的至少一项。
3.根据权利要求2所述的方法,其特征在于,在所述根据所述会话恢复第一连接的步骤之后,还包括:
根据所述会话确定与所述客户端对应的历史连接;所述历史连接为断线前所述第一游戏业务进程与所述客户端之间的连接;
获取所述历史连接对应的上行连接信息和下行连接信息;
将所述上行连接信息和所述下行连接信息迁移至所述第一连接中;
触发所述连接管理进程关闭所述历史连接。
4.根据权利要求2所述的方法,其特征在于,还包括:
若所述会话不存在,则新建与所述客户端对应的会话;
通过新建的会话重新建立所述第一游戏业务进程与所述客户端之间的连接。
5.根据权利要求2所述的方法,其特征在于,在断线前,所述方法还包括:
控制第一游戏业务进程通过负载均衡的方式从至少一个候选游戏业务进程中选择出所述第二游戏业务进程。
6.根据权利要求5所述的方法,其特征在于,在所述若确定存在待恢复的第二连接,获取所述第二连接的连接地址的步骤之前,还包括:
获取历史连接状态;所述历史连接状态为所述客户端在断线前与所述至少一个候选游戏业务进程的连接状态;
根据所述历史连接状态确定是否存在所述第二连接。
7.根据权利要求1至6任一项所述的方法,其特征在于,还包括:
若接收到所述客户端发送的心跳包,根据所述心跳包更新对应会话的心跳时间;所述心跳包由所述客户端定期发送;
若设定时间段内未接收到所述客户端发送的心跳包,回收对应会话,并将对应的游戏账户设置为离线状态;所述游戏账户为所述客户端在所述服务端中注册的账户。
8.一种断线重连方法,应用于客户端,所述方法包括:
向服务端的连接管理进程发送断线重连请求,以触发所述服务端确定对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取;
接收所述连接管理进程通过所述第一连接返回的所述连接地址;
通过所述连接地址恢复所述第二连接。
9.根据权利要求8所述的方法,其特征在于,在所述通过所述连接地址恢复所述第二连接的步骤之后,还包括:
向所述服务端发送追帧请求;所述追帧请求用于触发所述服务端从至少一个数据帧中获取目标数据帧;所述至少一个数据帧为游戏应用程序在游戏战斗模式中符合预设条件的数据帧;
接收所述服务端发送的所述目标数据帧,计算所述目标数据帧的上下文信息;
从所述服务端中获取所述游戏应用程序在当前时刻的状态信息;
若所述上下文信息与所述状态信息不匹配,继续向所述服务端发送追帧请求,并重复计算上下文信息和获取状态信息的步骤,直到上下文信息与状态信息相匹配,恢复所述游戏战斗模式。
10.根据权利要求9所述的方法,其特征在于,所述向所述服务端发送追帧请求的步骤之前,还包括:
向所述服务端发送初始化请求;所述初始化请求用于触发所述服务端获取所述游戏应用程序的初始化信息;
根据所述服务端返回的所述初始化信息进行初始化操作。
11.根据权利要求9或10所述的方法,其特征在于,
若所述服务端为所述游戏应用程序所在的服务器,则通过内部连接管理进程与所述服务器中的游戏业务进程进行通信;
若所述服务端为外部平台,则通过外部连接代理进程与所述外部平台中的游戏业务进程进行通信;所述外部平***立于所述游戏应用程序所在的服务器。
12.一种断线重连装置,其特征在于,应用于服务端,所述装置包括:
会话确定模块,用于在接收到客户端通过连接管理进程发送的断线重连请求时,确定与所述客户端对应的会话;
第一连接恢复模块,用于根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;
连接地址获取模块,用于若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取得到;
第二连接恢复模块,用于触发所述连接管理进程将所述连接地址通过所述第一连接返回给所述客户端,以恢复所述第二连接。
13.一种断线重连装置,其特征在于,应用于客户端,所述装置包括:
重连请求发送模块,用于向服务端的连接管理进程发送断线重连请求,以触发所述服务端确定对应的会话;根据所述会话恢复第一连接;所述第一连接为所述服务端中的第一游戏业务进程通过所述连接管理进程与客户端构成的连接;若确定存在待恢复的第二连接,获取所述第二连接的连接地址;所述第二连接为所述服务端中的第二游戏业务进程与所述客户端之间的连接,所述连接地址由所述第一游戏业务进程从所述第二游戏业务进程中获取;
连接地址接收模块,用于接收所述连接管理进程通过所述第一连接返回的所述连接地址;
连接恢复模块,用于通过所述连接地址恢复所述第二连接。
14.一种断线重连***,其特征在于,所述***包括:服务端和客户端;所述服务端中包含有第一游戏业务进程、第二游戏业务进程和连接管理进程;
所述客户端,用于向服务端的连接管理进程发送断线重连请求;
所述连接管理进程,用于确定与所述客户端对应的会话,根据所述会话恢复第一连接;所述第一连接为所述第一游戏业务进程通过所述连接管理进程与所述客户端构成的连接;
所述第一游戏业务进程,用于若确定存在待恢复的第二连接,从所述第二游戏业务进程中获取第二连接的连接地址;所述第二连接为所述第二游戏业务进程与所述客户端之间的连接;
所述连接管理进程,还用于将所述连接地址通过所述第一连接返回给所述客户端;
所述客户端,还用于通过所述连接地址恢复与所述第二连接。
15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010175673.6A CN111416849B (zh) | 2020-03-13 | 2020-03-13 | 断线重连方法、装置、***和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010175673.6A CN111416849B (zh) | 2020-03-13 | 2020-03-13 | 断线重连方法、装置、***和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111416849A true CN111416849A (zh) | 2020-07-14 |
CN111416849B CN111416849B (zh) | 2021-07-13 |
Family
ID=71492961
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010175673.6A Active CN111416849B (zh) | 2020-03-13 | 2020-03-13 | 断线重连方法、装置、***和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111416849B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113521727A (zh) * | 2021-07-22 | 2021-10-22 | 网易(杭州)网络有限公司 | 一种游戏重连方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104270339A (zh) * | 2014-09-01 | 2015-01-07 | 腾讯科技(深圳)有限公司 | 一种tcp连接断线重连方法、设备及*** |
US20150149524A1 (en) * | 2013-11-27 | 2015-05-28 | Sharp Kabushiki Kaisha | Network system, constant connection method, electronic device, server, and program |
CN104935634A (zh) * | 2015-04-27 | 2015-09-23 | 南京大学 | 基于分布共享存储的移动设备数据共享方法 |
CN105635116A (zh) * | 2015-12-18 | 2016-06-01 | 网易(杭州)网络有限公司 | 断线重连方法、装置及*** |
CN105653386A (zh) * | 2015-12-30 | 2016-06-08 | 广东欧珀移动通信有限公司 | 一种进程崩溃处理方法及终端设备 |
CN105677451A (zh) * | 2014-11-18 | 2016-06-15 | 北京风行在线技术有限公司 | 一种用于多进程的负载均衡的方法和设备 |
US20170156083A1 (en) * | 2015-11-30 | 2017-06-01 | Zynga Inc. | Maintaining persistent mobile device session |
CN108540450A (zh) * | 2018-03-12 | 2018-09-14 | 网易(杭州)网络有限公司 | 数据发送、接收方法及装置 |
-
2020
- 2020-03-13 CN CN202010175673.6A patent/CN111416849B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150149524A1 (en) * | 2013-11-27 | 2015-05-28 | Sharp Kabushiki Kaisha | Network system, constant connection method, electronic device, server, and program |
CN104270339A (zh) * | 2014-09-01 | 2015-01-07 | 腾讯科技(深圳)有限公司 | 一种tcp连接断线重连方法、设备及*** |
CN105677451A (zh) * | 2014-11-18 | 2016-06-15 | 北京风行在线技术有限公司 | 一种用于多进程的负载均衡的方法和设备 |
CN104935634A (zh) * | 2015-04-27 | 2015-09-23 | 南京大学 | 基于分布共享存储的移动设备数据共享方法 |
US20170156083A1 (en) * | 2015-11-30 | 2017-06-01 | Zynga Inc. | Maintaining persistent mobile device session |
CN105635116A (zh) * | 2015-12-18 | 2016-06-01 | 网易(杭州)网络有限公司 | 断线重连方法、装置及*** |
CN105653386A (zh) * | 2015-12-30 | 2016-06-08 | 广东欧珀移动通信有限公司 | 一种进程崩溃处理方法及终端设备 |
CN108540450A (zh) * | 2018-03-12 | 2018-09-14 | 网易(杭州)网络有限公司 | 数据发送、接收方法及装置 |
Non-Patent Citations (2)
Title |
---|
CHUNYAN FU: ""a novel session recovery mechanism for cluster-based signaling architecture for conferencing in manets"", 《IEEE》 * |
林佳作: ""基于长连接的移动终端消息推送***的设计与实现"", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113521727A (zh) * | 2021-07-22 | 2021-10-22 | 网易(杭州)网络有限公司 | 一种游戏重连方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111416849B (zh) | 2021-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10140112B2 (en) | Update management system and update management method | |
US9223671B2 (en) | Method and system for providing high availability to computer applications | |
US9992058B2 (en) | Redundant storage solution | |
WO2023046088A1 (zh) | 一种应用于音视频数据传输的端到端***解决方法 | |
CN109525627B (zh) | 数据传输方法、装置、存储介质及电子装置 | |
US20090106422A1 (en) | Methods, apparatus and techniques for suspending, resuming, and sharing sessions using object serialization | |
CN112804213B (zh) | 通信断线重连方法及装置、***、可读介质和电子设备 | |
WO2017176453A1 (en) | Method for optimal vm selection for multi data center virtual network function deployment | |
CN112306755B (zh) | 一种基于微前端架构的高可用性实现方法和*** | |
CN112612769A (zh) | 文件处理方法、装置及存储介质 | |
CN111880929A (zh) | 一种实例管理方法及装置、计算机设备 | |
US11650892B1 (en) | Resilient coordination, command, and control of widely distributed test agents | |
CN111416849B (zh) | 断线重连方法、装置、***和计算机设备 | |
CN110351122B (zh) | 容灾方法、装置、***与电子设备 | |
CN109714328B (zh) | 游戏集群的容量调整方法和装置 | |
CN116193481A (zh) | 一种5g核心网处理方法、装置、设备及介质 | |
CN111541608A (zh) | 一种网络通信的方法、***以及相关装置 | |
CN105978746B (zh) | 游戏服务器集群***及提高游戏空间服务方法 | |
CN104702693A (zh) | 两节点***分区的处理方法和节点 | |
CN111966469B (zh) | 一种集群虚拟机高可用方法及*** | |
CN101072233B (zh) | 基于无状态网络协议模拟有状态连接的方法及*** | |
CN111414411B (zh) | 高可用度数据库*** | |
CN113596197A (zh) | 一种地址切换方法、装置、电子设备及存储介质 | |
CN113949631A (zh) | 客户端容灾的处理方法、***及电子设备 | |
CN109240608B (zh) | 一种配置信息同步方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40025605 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |