CN112426721A - 游戏服务器代码热更新方法及装置、存储介质 - Google Patents
游戏服务器代码热更新方法及装置、存储介质 Download PDFInfo
- Publication number
- CN112426721A CN112426721A CN202011419530.1A CN202011419530A CN112426721A CN 112426721 A CN112426721 A CN 112426721A CN 202011419530 A CN202011419530 A CN 202011419530A CN 112426721 A CN112426721 A CN 112426721A
- Authority
- CN
- China
- Prior art keywords
- client
- data packet
- sending
- response
- cache
- 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
- 238000000034 method Methods 0.000 title claims abstract description 499
- 230000008569 process Effects 0.000 claims abstract description 454
- 238000012545 processing Methods 0.000 claims abstract description 54
- 230000004044 response Effects 0.000 claims description 74
- 238000004590 computer program Methods 0.000 claims description 11
- 238000012423 maintenance Methods 0.000 abstract description 10
- 238000011161 development Methods 0.000 abstract description 9
- 230000009286 beneficial effect Effects 0.000 abstract 1
- 230000003068 static effect Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
- A63F13/69—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor by enabling or updating specific game elements, e.g. unlocking hidden features, items, levels or versions
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/70—Game security or game management aspects
- A63F13/77—Game security or game management aspects involving data related to game devices or game servers, e.g. configuration data, software version or amount of memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种游戏服务器代码热更新方法及装置、存储介质、计算机设备,该方法包括:响应于热更新指令,确定所述热更新指令对应的第一进程和第二进程,并断开所述第一进程与客户端之间的连接,其中,所述第一进程用于存储第一客户端数据包对应的处理进度以及进程缓存数据包;通过所述第二进程连接所述第一进程,通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,并退出所述第一进程;建立所述第二进程与所述客户端之间的连接,通过所述第二进程向所述客户端发送所述进程缓存数据包。本申请有助于降低游戏服务器热更新的复杂度,提高游戏服务器热更新的开发效率以及维护效率。
Description
技术领域
本申请涉及计算机技术领域,尤其是涉及到一种游戏服务器代码热更新方法及装置、存储介质、计算机设备。
背景技术
游戏业务的一个重要特征是需求多变且复杂,这就导致了游戏应用程序的Bug数量多。尽管有内部的测试,但线上环境的多样性远远超过内部测试环境。游戏上线后没有人能保证不出重大Bug,没有人能保证玩法没有重大漏洞。如何在游戏上线后快速处理Bug以及玩家反馈,把问题限制在可控范围内就成了一个游戏能否成功运营的关键。另外,一些玩法的问题和需求也需要在线上和玩家的互动过程中才能发现,游戏策划人员也迫切需要一种能在线上快速更新游戏的方法。在这种态势下,传统的服务器维护,重启的策略已经不适应现代游戏运营的需求。各大游戏服务商迫切需要一种能在不打断游戏服务的情况下对游戏服务器进行更新的方法,即服务器的热更新方法,以满足游戏的线上快速迭代需求。
根据热更新内容的范围,可以粗略划分为数据热更新和代码热更新两类。其中,数据热更新的更新范围有限,常常无法满足游戏服务器的更新需求,当前业界对于代码的热更新一般是利用动态语言可在运行时加载执行新代码的特性来实现。现有技术中,利用动态语言特性的代码热更新的主要缺陷是运行效率低。一般而论,动态语言的运行效率比静态语言普遍慢10倍以上。这导致利用动态语言热更新的服务器承载相对较低。如果要提高其性能,就需要将一些高频代码用C/C++外部库的方式提供,这又增加了系统复杂度,并导致这部分代码不能热更新。另外动态语言由于缺少静态检查,开发效率以及维护效率较低。因此,如何提高游戏服务器的热更新效率和可靠性成为了业界的热点问题。
发明内容
有鉴于此,本申请提供了一种游戏服务器代码热更新方法及装置、存储介质、计算机设备,有助于降低游戏服务器热更新的复杂度,提高游戏服务器热更新的开发效率以及维护效率。
根据本申请的一个方面,提供了一种游戏服务器代码热更新方法,包括:
响应于热更新指令,确定所述热更新指令对应的第一进程和第二进程,并断开所述第一进程与客户端之间的连接,其中,所述第一进程用于存储第一客户端数据包对应的处理进度以及进程缓存数据包;
通过所述第二进程连接所述第一进程,通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,并退出所述第一进程;
建立所述第二进程与所述客户端之间的连接,通过所述第二进程向所述客户端发送所述进程缓存数据包。
可选地,所述第一进程、所述第二进程以及所述客户端作为数据接收方用于接收和处理携带有编号的数据包,并基于处理后的数据包发送相应的应答编号,所述第一进程、所述第二进程以及所述客户端作为数据发送方用于发送携带有编号的数据包并将未接收到相应应答编号的数据包保存为缓存数据包。
可选地,所述第一进程具体用于接收和处理所述客户端发送的第一客户端数据包,并基于处理后的第一客户端数据包发送相应的第一进程应答编号,以及向所述客户端发送第一进程数据包,并将所述客户端未应答的第一进程数据包保存为进程缓存数据包;
所述通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,具体包括:
对所述第一进程的玩家状态数据进行序列化处理,生成玩家状态数据包;
通过所述第一进程向所述第二进程发送所述玩家状态数据包、所述第一进程应答编号以及所述进程缓存数据包。
可选地,所述建立所述第二进程与所述客户端之间的连接之后,所述方法还包括:
通过所述第二进程对所述玩家状态数据包进行反序列化处理得到玩家状态数据。
可选地,所述通过所述第二进程向所述客户端发送所述进程缓存数据包,具体包括:
通过所述第二进程向所述客户端发送所述第一进程应答编号,控制所述客户端基于所述第一进程应答编号向所述第二进程发送对应的第二客户端数据包,通过所述第二进程接收并处理所述第二客户端数据包,并基于处理后的第二客户端数据包发送相应的第二进程应答编号;以及
通过所述第二进程接收所述客户端发送的客户端应答编号,并基于所述客户端应答编号以及所述进程缓存数据包向所述客户端发送第二进程数据包。
可选地,所述方法还包括:
通过所述客户端向所述第一进程发送第一客户端数据包,并将未接收到应答的第一客户端数据保存为客户端缓存数据包,其中,所述客户端缓存数据包用于在所述客户端与所述第二进程建立连接后作为第二客户端数据包向所述第二进程发送。
根据本申请的另一方面,提供了一种游戏服务器代码热更新装置,包括:
更新指令响应模块,用于响应于热更新指令,确定所述热更新指令对应的第一进程和第二进程,并断开所述第一进程与客户端之间的连接,其中,所述第一进程用于存储第一客户端数据包对应的处理进度以及进程缓存数据包;
第一连接模块,用于通过所述第二进程连接所述第一进程,通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,并退出所述第一进程;
第二连接模块,用于建立所述第二进程与所述客户端之间的连接,通过所述第二进程向所述客户端发送所述进程缓存数据包。
可选地,所述第一进程、所述第二进程以及所述客户端作为数据接收方用于接收和处理携带有编号的数据包,并基于处理后的数据包发送相应的应答编号,所述第一进程、所述第二进程以及所述客户端作为数据发送方用于发送携带有编号的数据包并将未接收到相应应答编号的数据包保存为缓存数据包。
可选地,所述第一进程具体用于接收和处理所述客户端发送的第一客户端数据包,并基于处理后的第一客户端数据包发送相应的第一进程应答编号,以及向所述客户端发送第一进程数据包,并将所述客户端未应答的第一进程数据包保存为进程缓存数据包;
所述第一连接模块,具体包括:
状态数据生成单元,用于对所述第一进程的玩家状态数据进行序列化处理,生成玩家状态数据包;
状态数据发送单元,用于通过所述第一进程向所述第二进程发送所述玩家状态数据包、所述第一进程应答编号以及所述进程缓存数据包。
可选地,所述装置还包括:
状态数据处理模块,用于建立所述第二进程与所述客户端之间的连接之后,通过所述第二进程对所述玩家状态数据包进行反序列化处理得到玩家状态数据。
可选地,所述第二连接模块,具体包括:
客户端数据发送单元,用于通过所述第二进程向所述客户端发送所述第一进程应答编号,控制所述客户端基于所述第一进程应答编号向所述第二进程发送对应的第二客户端数据包,通过所述第二进程接收并处理所述第二客户端数据包,并基于处理后的第二客户端数据包发送相应的第二进程应答编号;
进程数据发送单元,用于通过所述第二进程接收所述客户端发送的客户端应答编号,并基于所述客户端应答编号以及所述进程缓存数据包向所述客户端发送第二进程数据包。
可选地,所述装置还包括:
客户端数据发送模块,用于通过所述客户端向所述第一进程发送第一客户端数据包,并将未接收到应答的第一客户端数据保存为客户端缓存数据包,其中,所述客户端缓存数据包用于在所述客户端与所述第二进程建立连接后作为第二客户端数据包向所述第二进程发送。
依据本申请又一个方面,提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述游戏服务器代码热更新方法。
依据本申请再一个方面,提供了一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述游戏服务器代码热更新方法。
借由上述技术方案,本申请提供的一种游戏服务器代码热更新方法及装置、存储介质、计算机设备,确定热更新指令对应的旧进程即第一进程,以及新进程即第二进程,断开第一进程与客户端之间的连接,并将第二进程与第一进程连接,发送第一进程内的第一客户端数据包对应的处理进度以及进程缓存数据包至第二进程后,退出第一进程,进而建立第二进程与客户端之间的连接,并利用第二进程继续接收客户端的数据包以及向客户端发送缓存数据包,实现第二进程对第一进程的更新。本申请实施例实现了利用静态语言进行游戏更新,通过第二进程继承第一进程中的第一客户端数据包对应的处理进度以及进程缓存数据包,从而利用第二进程替代第一进程实现游戏服务器热更新,解决了现有技术中依赖于C/C++外部库的方式提供高频代码导致的更新过程复杂度高的问题,摒弃了原有的复杂的代码编辑方式,降低了游戏服务器热更新的复杂度,且采用静态语言进行更新,解决了现有技术中动态语言由于缺少静态检查导致开发效率以及维护效率低的问题,可以对第二进程进行静态检查,提高了游戏服务器热更新的开发效率以及维护效率。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1示出了本申请实施例提供的一种游戏服务器代码热更新方法的流程示意图;
图2示出了本申请实施例提供的另一种游戏服务器代码热更新方法的流程示意图;
图3示出了本申请实施例提供的一种游戏服务器代码热更新装置的结构示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在本实施例中提供了一种游戏服务器代码热更新方法,如图1所示,该方法包括:
步骤101,响应于热更新指令,确定所述热更新指令对应的第一进程和第二进程,并断开所述第一进程与客户端之间的连接,其中,所述第一进程用于存储第一客户端数据包对应的处理进度以及进程缓存数据包;
步骤102,通过所述第二进程连接所述第一进程,通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,并退出所述第一进程;
步骤103,建立所述第二进程与所述客户端之间的连接,通过所述第二进程向所述客户端发送所述进程缓存数据包。
本申请实施例可以应用于游戏服务器代码热更新设备中,该设备可集成于游戏服务器中,该实施例提供的方法适用于在游戏服务器进行热更新时新、老进程以及客户端中的数据继承和数据传输,实现在客户端侧游戏不掉线的情况下,将游戏服务器中的老进程更新为新进程,即实现游戏服务器的热更新,从而更新游戏内容或者修复游戏漏洞等等。其中,热更新指令可以是游戏服务器发起的,例如玩家体验游戏过程中服务器强制进行游戏更新,热更新指令也可以是玩家发起的,例如玩家体验游戏过程中通过游戏内弹窗界面询问玩家是否更新,用户确认后进行游戏更新。
在本申请实施例中,根据热更新指令,确定与该热更新指令对应的第一进程和第二进程,进程是指计算机程序中关于数据集合上的一次运行活动,它是系统进行资源分配和调度的基本单位、操作系统结构的基础。其中,第一进程是本次游戏服务器更新需要被替换掉的旧进程,或者说是旧代码生成的旧进程,第二进程是用于替换第一进程的新进程,或者说是替换原有旧代码的新代码生成的新进程。在游戏正常运行未进行热更新时,基于第一进程与客户端之间的数据传输,游戏角色实现在游戏世界中的活动,例如,客户端向游戏服务器的第一进程发送控制游戏角色行走的消息,第一进程对该消息进程处理生成游戏角色在游戏世界中的行走数据并发送给客户端。第一进程中存储有客户端发送的第一客户端数据包,例如控制游戏角色行走的消息,第一进程中还存储有进程缓存数据包,例如还未发送、或者发送失败的游戏角色在游戏世界中的行走数据。在游戏服务器开始进行热更新时,断开第一进程与客户端之间的连接,第一进程不再接收客户端发送的数据包,之后建立第一进程与第二进程之间的连接,利用第二进程继承第一进程中存储的数据包,具体可以控制第一进程向第二进程发送第一客户端数据包对应的处理进度以及进程缓存数据包,以使第二进程对第一进程中的数据进行继承,第二进程基于继承的进程缓存数据包以及第一客户端数据包的处理进度可以在游戏更新后通过第二进程继续与客户端进行数据交互,在第一进程中的数据被第二进程继承后,第一进程退出。
进一步,建立第二进程与客户端之间的连接,实现游戏服务器热更新,第二进程对于第一进程已经处理但还未将处理结果发送给客户端或者发送失败的情况下产生的上述进程缓存数据包,由第二进程继续向客户端发送,从而最终实现由第二进程继承第一进程中的数据,并由第二进程代替原来的第一进程继续接收客户端发送来的数据包,以通过第二进程实现相应的游戏功能,在游戏不掉线的前提下实现对游戏的更新,即实现游戏热更新。
通过应用本实施例的技术方案,确定热更新指令对应的旧进程即第一进程,以及新进程即第二进程,断开第一进程与客户端之间的连接,并将第二进程与第一进程连接,发送第一进程内的第一客户端数据包对应的处理进度以及进程缓存数据包至第二进程后,退出第一进程,进而建立第二进程与客户端之间的连接,并利用第二进程继续接收客户端的数据包以及向客户端发送缓存数据包,实现第二进程对第一进程的更新。本申请实施例实现了利用静态语言进行游戏更新,通过第二进程继承第一进程中的第一客户端数据包对应的处理进度以及进程缓存数据包,从而利用第二进程替代第一进程实现游戏服务器热更新,解决了现有技术中依赖于C/C++外部库的方式提供高频代码导致的更新过程复杂度高的问题,摒弃了原有的复杂的代码编辑方式,降低了游戏服务器热更新的复杂度,且采用静态语言进行更新,解决了现有技术中动态语言由于缺少静态检查导致开发效率以及维护效率低的问题,可以对第二进程进行静态检查,提高了游戏服务器热更新的开发效率以及维护效率。
进一步的,作为上述实施例具体实施方式的细化和扩展,为了完整说明本实施例的具体实施过程,提供了另一种游戏服务器代码热更新方法,该方法包括:
步骤201,响应于热更新指令,确定所述热更新指令对应的第一进程和第二进程,并断开所述第一进程与客户端之间的连接;
本申请实施例中,具体地,所述第一进程、所述第二进程以及所述客户端作为数据接收方用于接收和处理携带有编号的数据包,并基于处理后的数据包发送相应的应答编号,所述第一进程、所述第二进程以及所述客户端作为数据发送方用于发送携带有编号的数据包并将未接收到相应应答编号的数据包保存为缓存数据包。
在上述实施例中,第一进程、第二进程以及客户端均作为数据接收方和数据发送方,接收方接收数据并进行数据处理后会向发送方应答,表明已处理了某个数据包,而对于没有收到应答的数据包,发送方会进行缓存,这样,连接双方就形成了未应答的滑动窗口式的数据包缓存。在该实施例中,第一进程、第二进程以及客户端作为数据接收方时,用于接收和处理携带有编号的数据包,并对数据包进行处理,以及对于处理过的数据包向发送方发送相应的应答编号,其中,为了区分每个数据包,发送方发送数据包时会同时发送该数据包的编号,即发送携带有编号的数据包,另外,对于接收方发送的应答编号,只要接收方对数据包进行处理,就会产生并发送相应数据包的应答编号,例如接收方基于接收到的数据包调用相应的处理函数,只要对处理函数进行调用就可以发送与该数据包对应的应答编号。另外,第一进程、第二进程以及客户端作为数据发送方时,用于发送携带有编号的数据包,并接收数据接收方返回的对数据包的应答编号,对于没有被应答的数据包将其保存为缓存数据包。
在具体应用场景中,所述第一进程具体用于接收和处理所述客户端发送的第一客户端数据包,并基于处理后的第一客户端数据包发送相应的第一进程应答编号,以及向所述客户端发送第一进程数据包,并将所述客户端未应答的第一进程数据包保存为进程缓存数据包。
步骤202,对所述第一进程的玩家状态数据进行序列化处理,生成玩家状态数据包;
步骤203,通过所述第一进程向所述第二进程发送所述玩家状态数据包、所述第一进程应答编号以及所述进程缓存数据包;
步骤204,建立所述第二进程与所述客户端之间的连接,通过所述第二进程对所述玩家状态数据包进行反序列化处理得到玩家状态数据;
在步骤202和步骤204中,如图2所示,第一进程向第二进程发送数据时,具体可以向第二进程发送第一进程应答编号、进程缓存数据包以及玩家状态数据包,该玩家状态数据包是基于第一进程内固有的玩家状态数据,并对其进行序列化而生成,第一进程向第二进程发送该玩家状态数据包。在游戏服务器热更新过程中,通过第一进程序列化的玩家状态数据,并将序列化得到的玩家状态数据包发送到第二进程,利用第二进程将该序列化的玩家状态数据包进行反序列化操作,还原玩家状态数据,实现了在游戏服务器热更新过程中的玩家状态信息的同步继承。
步骤205,通过所述第二进程向所述客户端发送所述第一进程应答编号,控制所述客户端基于所述第一进程应答编号向所述第二进程发送对应的第二客户端数据包,通过所述第二进程接收并处理所述第二客户端数据包,并基于处理后的第二客户端数据包发送相应的第二进程应答编号;
步骤206,通过所述第二进程接收所述客户端发送的客户端应答编号,并基于所述客户端应答编号以及所述进程缓存数据包向所述客户端发送第二进程数据包。
在步骤205至步骤206中,建立第二进程与客户端之间的连接后,第二进程可以替代原来的第一进程与客户端进行数据交互,第二进程可以继续将第一进程未发送或发送失败的进程缓存数据发送至客户端,还可以接收客户端发送的客户端数据包。具体来说,第一进程应答编号可以表示第一进程对客户端发送的数据包的处理进度,在该实施例中,第二进程向客户端发送第一进程应答编号,客户端在接收到第一进程应答编号之后,根据自身存储的客户端缓存数据包,向第二进程发送与该第一进程应答编号对应的第二客户端数据包,例如第一进程应答编号为5可以表示第一进程对客户端发送的数据包5以及之前的数据包进行了处理,那么第二进程继续接收并处理数据包5之后的客户端数据包即可。对于第二进程来说,第二进程接收客户端发送的第二客户端数据包,对第二客户端数据包进行处理(例如调用处理函数),并向客户端发送与处理过的第二客户端数据包对应的第二进程应答编号,例如第二进程接收并处理了客户端数据包6,则应向客户端发送与客户端数据包6对应的进程应答编号,以告知客户端该数据包已经被第二进程接收和处理。
另外,由于原有第一进程中可能存在部分未发送或发送失败的进程缓存数据包,为了确保客户端能够接收到进程产生的全部进程数据包,并避免数据包重复发送的现象产生。客户端向第二进程发送客户端应答编号,以告知客户端已经接收并处理的进程数据包进度,第二进程接收到客户端应答编号之后,基于该客户端应答编号以及从第一进程中继承的进程缓存数据包向客户端发送第二进程数据包。在此之后,第二进程和客户端之间基于上述的接收方和发送方的接收、发送方式进行数据交互即可。
在本申请任一实施例中,具体地,还包括:通过所述客户端向所述第一进程发送第一客户端数据包,并将未接收到应答的第一客户端数据保存为客户端缓存数据包,其中,所述客户端缓存数据包用于在所述客户端与所述第二进程建立连接后作为第二客户端数据包向所述第二进程发送。
在上述实施例中,在游戏服务器热更新过程中,第一进程与客户端之间的连接断开后,第一进程和客户端仍然可以向对方发送数据包,但是由于连接已断开,接收方无法接收并产生对数据包的应答,发送方会将未收到应答的数据包作为缓存数据包保存下来,在具体应用场景中,若发送方为客户端,则保存为客户端缓存数据包,若发送方为第一进程,则保存为进程缓存数据包,其中,缓存数据包在第二进程与客户端建立连接之后基于步骤205至步骤206描述的方式进行发送。
进一步的,作为图1方法的具体实现,本申请实施例提供了一种游戏服务器代码热更新装置,如图3所示,该装置包括:
更新指令响应模块31,用于响应于热更新指令,确定所述热更新指令对应的第一进程和第二进程,并断开所述第一进程与客户端之间的连接,其中,所述第一进程用于存储第一客户端数据包对应的处理进度以及进程缓存数据包;
第一连接模块32,用于通过所述第二进程连接所述第一进程,通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,并退出所述第一进程;
第二连接模块33,用于建立所述第二进程与所述客户端之间的连接,通过所述第二进程处理所述第一客户端数据包,以及通过所述第二进程向所述客户端发送所述进程缓存数据包。
可选地,所述第一进程、所述第二进程以及所述客户端作为数据接收方用于接收和处理携带有编号的数据包,并基于处理后的数据包发送相应的应答编号,所述第一进程、所述第二进程以及所述客户端作为数据发送方用于发送携带有编号的数据包并将未接收到相应应答编号的数据包保存为缓存数据包。
可选地,所述第一进程具体用于接收和处理所述客户端发送的第一客户端数据包,并基于处理后的第一客户端数据包发送相应的第一进程应答编号,以及向所述客户端发送第一进程数据包,并将所述客户端未应答的第一进程数据包保存为进程缓存数据包;
所述第一连接模块32,具体包括:
状态数据生成单元321,用于对所述第一进程的玩家状态数据进行序列化处理,生成玩家状态数据包;
状态数据发送单元322,用于通过所述第一进程向所述第二进程发送所述玩家状态数据包、所述第一进程应答编号以及所述进程缓存数据包。
可选地,所述装置包括:
状态数据处理模块34,用于建立所述第二进程与所述客户端之间的连接之后,通过所述第二进程对所述玩家状态数据包进行反序列化处理得到玩家状态数据。
可选地,所述第二连接模块33,具体包括:
客户端数据发送单元332,用于通过所述第二进程向所述客户端发送所述第一进程应答编号,控制所述客户端基于所述第一进程应答编号向所述第二进程发送对应的第二客户端数据包,通过所述第二进程接收并处理所述第二客户端数据包,并基于处理后的第二客户端数据包发送相应的第二进程应答编号;
进程数据发送单元333,用于通过所述第二进程接收所述客户端发送的客户端应答编号,并基于所述客户端应答编号以及所述进程缓存数据包向所述客户端发送第二进程数据包。
可选地,所述装置还包括:
客户端数据发送模块34,用于通过所述客户端向所述第一进程发送第一客户端数据包,并将未接收到应答的第一客户端数据保存为客户端缓存数据包,其中,所述客户端缓存数据包用于在所述客户端与所述第二进程建立连接后作为第二客户端数据包向所述第二进程发送。
需要说明的是,本申请实施例提供的一种游戏服务器代码热更新装置所涉及各功能单元的其他相应描述,可以参考图1至图2方法中的对应描述,在此不再赘述。
基于上述如图1至图2所示方法,相应的,本申请实施例还提供了一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述如图1至图2所示的游戏服务器代码热更新方法。
基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
基于上述如图1至图2所示的方法,以及图3所示的虚拟装置实施例,为了实现上述目的,本申请实施例还提供了一种计算机设备,具体可以为个人计算机、服务器、网络设备等,该计算机设备包括存储介质和处理器;存储介质,用于存储计算机程序;处理器,用于执行计算机程序以实现上述如图1至图2所示的游戏服务器代码热更新方法。
可选地,该计算机设备还可以包括用户接口、网络接口、摄像头、射频(RadioFrequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、WI-FI接口)等。
本领域技术人员可以理解,本实施例提供的一种计算机设备结构并不构成对该计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储介质中还可以包括操作系统、网络通信模块。操作系统是管理和保存计算机设备硬件和软件资源的程序,支持信息处理程序以及其它软件和/或程序的运行。网络通信模块用于实现存储介质内部各组件之间的通信,以及与该实体设备中其它硬件和软件之间通信。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以借助软件加必要的通用硬件平台的方式来实现,也可以通过硬件实现确定热更新指令对应的旧进程即第一进程,以及新进程即第二进程,断开第一进程与客户端之间的连接,并将第二进程与第一进程连接,发送第一进程内的第一客户端数据包对应的处理进度以及进程缓存数据包至第二进程后,退出第一进程,进而建立第二进程与客户端之间的连接,并利用第二进程继续接收客户端的数据包以及向客户端发送缓存数据包,实现第二进程对第一进程的更新。本申请实施例实现了利用静态语言进行游戏更新,通过第二进程继承第一进程中的第一客户端数据包对应的处理进度以及进程缓存数据包,从而利用第二进程替代第一进程实现游戏服务器热更新,解决了现有技术中依赖于C/C++外部库的方式提供高频代码导致的更新过程复杂度高的问题,摒弃了原有的复杂的代码编辑方式,降低了游戏服务器热更新的复杂度,且采用静态语言进行更新,解决了现有技术中动态语言由于缺少静态检查导致开发效率以及维护效率低的问题,可以对第二进程进行静态检查,提高了游戏服务器热更新的开发效率以及维护效率。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。
Claims (10)
1.一种游戏服务器代码热更新方法,其特征在于,包括:
响应于热更新指令,确定所述热更新指令对应的第一进程和第二进程,并断开所述第一进程与客户端之间的连接,其中,所述第一进程用于存储第一客户端数据包对应的处理进度以及进程缓存数据包;
通过所述第二进程连接所述第一进程,通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,并退出所述第一进程;
建立所述第二进程与所述客户端之间的连接,通过所述第二进程向所述客户端发送所述进程缓存数据包。
2.根据权利要求1所述的方法,其特征在于,所述第一进程、所述第二进程以及所述客户端作为数据接收方用于接收和处理携带有编号的数据包,并基于处理后的数据包发送相应的应答编号,所述第一进程、所述第二进程以及所述客户端作为数据发送方用于发送携带有编号的数据包并将未接收到相应应答编号的数据包保存为缓存数据包。
3.根据权利要求2所述的方法,其特征在于,所述第一进程具体用于接收和处理所述客户端发送的第一客户端数据包,并基于处理后的第一客户端数据包发送相应的第一进程应答编号,以及向所述客户端发送第一进程数据包,并将所述客户端未应答的第一进程数据包保存为进程缓存数据包;
所述通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,具体包括:
对所述第一进程的玩家状态数据进行序列化处理,生成玩家状态数据包;
通过所述第一进程向所述第二进程发送所述玩家状态数据包、所述第一进程应答编号以及所述进程缓存数据包。
4.根据权利要求3所述的方法,其特征在于,所述建立所述第二进程与所述客户端之间的连接之后,所述方法还包括:
通过所述第二进程对所述玩家状态数据包进行反序列化处理得到玩家状态数据。
5.根据权利要求2所述的方法,其特征在于,所述通过所述第二进程向所述客户端发送所述进程缓存数据包,具体包括:
通过所述第二进程向所述客户端发送所述第一进程应答编号,控制所述客户端基于所述第一进程应答编号向所述第二进程发送对应的第二客户端数据包,通过所述第二进程接收并处理所述第二客户端数据包,并基于处理后的第二客户端数据包发送相应的第二进程应答编号;以及
通过所述第二进程接收所述客户端发送的客户端应答编号,并基于所述客户端应答编号以及所述进程缓存数据包向所述客户端发送第二进程数据包。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括:
通过所述客户端向所述第一进程发送第一客户端数据包,并将未接收到应答的第一客户端数据保存为客户端缓存数据包,其中,所述客户端缓存数据包用于在所述客户端与所述第二进程建立连接后作为第二客户端数据包向所述第二进程发送。
7.一种游戏服务器代码热更新装置,其特征在于,包括:
更新指令响应模块,用于响应于热更新指令,确定所述热更新指令对应的第一进程和第二进程,并断开所述第一进程与客户端之间的连接,其中,所述第一进程用于存储第一客户端数据包对应的处理进度以及进程缓存数据包;
第一连接模块,用于通过所述第二进程连接所述第一进程,通过所述第一进程向所述第二进程发送所述第一客户端数据包对应的处理进度以及所述进程缓存数据包,并退出所述第一进程;
第二连接模块,用于建立所述第二进程与所述客户端之间的连接,通过所述第二进程向所述客户端发送所述进程缓存数据包。
8.根据权利要求7所述的装置,其特征在于,所述第一进程、所述第二进程以及所述客户端作为数据接收方用于接收和处理携带有编号的数据包,并基于处理后的数据包发送相应的应答编号,所述第一进程、所述第二进程以及所述客户端作为数据发送方用于发送携带有编号的数据包并将未接收到相应应答编号的数据包保存为缓存数据包。
9.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法。
10.一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011419530.1A CN112426721A (zh) | 2020-12-07 | 2020-12-07 | 游戏服务器代码热更新方法及装置、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011419530.1A CN112426721A (zh) | 2020-12-07 | 2020-12-07 | 游戏服务器代码热更新方法及装置、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112426721A true CN112426721A (zh) | 2021-03-02 |
Family
ID=74691530
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011419530.1A Pending CN112426721A (zh) | 2020-12-07 | 2020-12-07 | 游戏服务器代码热更新方法及装置、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112426721A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105120005A (zh) * | 2015-09-11 | 2015-12-02 | 厦门喜鱼网络科技有限公司 | 一种游戏服务器热更新方法、服务器及系统 |
EP2981911A1 (en) * | 2013-04-03 | 2016-02-10 | King.com Limited | Method and apparatus and system for data cache handling |
CN106528225A (zh) * | 2016-11-03 | 2017-03-22 | 北京像素软件科技股份有限公司 | 一种游戏服务器的热更新方法及装置 |
CN107158705A (zh) * | 2017-05-18 | 2017-09-15 | 腾讯科技(深圳)有限公司 | 服务的更新方法和装置 |
CN111158722A (zh) * | 2019-12-27 | 2020-05-15 | 无锡中尧网络科技有限公司 | 手游客户端热更新方法 |
-
2020
- 2020-12-07 CN CN202011419530.1A patent/CN112426721A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2981911A1 (en) * | 2013-04-03 | 2016-02-10 | King.com Limited | Method and apparatus and system for data cache handling |
CN105120005A (zh) * | 2015-09-11 | 2015-12-02 | 厦门喜鱼网络科技有限公司 | 一种游戏服务器热更新方法、服务器及系统 |
CN106528225A (zh) * | 2016-11-03 | 2017-03-22 | 北京像素软件科技股份有限公司 | 一种游戏服务器的热更新方法及装置 |
CN107158705A (zh) * | 2017-05-18 | 2017-09-15 | 腾讯科技(深圳)有限公司 | 服务的更新方法和装置 |
CN111158722A (zh) * | 2019-12-27 | 2020-05-15 | 无锡中尧网络科技有限公司 | 手游客户端热更新方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8726280B2 (en) | Method and system for autonomic application program spawning in a computing environment | |
CN110141864B (zh) | 一种游戏自动测试方法、装置及终端 | |
JP4216722B2 (ja) | ネットワーク接続されたリソース上の制約を有する装置の実行及びリソースをオフロードする方法及びシステム | |
CN112767135B (zh) | 规则引擎的配置方法及装置、存储介质、计算机设备 | |
CN112767133B (zh) | 业务决策方法及装置、存储介质、计算机设备 | |
CN114089974B (zh) | 云端代码开发系统、方法、装置、设备及存储介质 | |
CN111880929A (zh) | 一种实例管理方法及装置、计算机设备 | |
CN112965806B (zh) | 用于确定资源的方法和装置 | |
CN113032160B (zh) | 一种数据同步的管理方法以及相关装置 | |
CN110795205A (zh) | 基于软件容器提供云端服务的系统及方法 | |
CN112565390B (zh) | 服务分配方法、装置、电子设备及存储介质 | |
CN113055483A (zh) | 消息中间件数据处理方法、装置及系统 | |
CN112426721A (zh) | 游戏服务器代码热更新方法及装置、存储介质 | |
CN112866422B (zh) | 一种数据请求处理方法和装置 | |
CN111258902B (zh) | 基于SockJS服务器的性能测试方法和性能测试系统 | |
CN112181766B (zh) | 一种基于应用软件的预警方法、计算机设备及存储介质 | |
CN110933122B (zh) | 管理服务器的方法、设备和计算机存储介质 | |
CN111324386A (zh) | 分身应用程序的启动方法、装置、电子设备及存储介质 | |
CN111416852A (zh) | 在多个负载均衡器之间进行会话同步的方法和负载均衡器 | |
CN114253649B (zh) | 图像渲染方法、装置、设备及可读存储介质 | |
CN115086263B (zh) | Ios终端的im消息发送方法、系统、存储介质、计算机设备 | |
CN113209635B (zh) | 基于缓存队列的数据处理方法、装置及存储介质 | |
CN111324888B (zh) | 应用程序启动时的验证方法、装置、电子设备及存储介质 | |
CN115599528A (zh) | 加锁异常的处理方法及装置、存储介质、计算机设备 | |
CN117527795A (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 |