CN111737012B - 数据包的同步方法、装置、设备及存储介质 - Google Patents
数据包的同步方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111737012B CN111737012B CN202010760504.9A CN202010760504A CN111737012B CN 111737012 B CN111737012 B CN 111737012B CN 202010760504 A CN202010760504 A CN 202010760504A CN 111737012 B CN111737012 B CN 111737012B
- Authority
- CN
- China
- Prior art keywords
- data packet
- frame
- message queue
- identifier
- thread
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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/30—Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
- A63F13/31—Communication aspects specific to video games, e.g. between several handheld game devices at close range
-
- 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/30—Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
- A63F13/35—Details of game servers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17325—Synchronisation; Hardware support therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- 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
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/50—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
- A63F2300/53—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种数据包的同步方法、装置、设备及存储介质,涉及数据通讯领域。该方法应用于服务器中,服务器设置有k个逻辑线程和k个消息队列,k为正整数,逻辑线程和消息队列一一对应,逻辑线程是根据逻辑运算类型划分的,该方法包括:接收客户端发送的数据包,数据包携带有线程标识和帧标识,线程标识是客户端根据数据包需要的逻辑运算类型添加的,帧标识用于标识触发数据包时的画面帧;将数据包发送至与线程标识对应的逻辑线程进行逻辑运算后,将运算后的数据包写入至与逻辑线程对应的消息队列中;根据帧标识从消息队列中读取运算后的数据包,将运算后的数据包同步至至少一个关联客户端中。减少了消息队列在服务器中所占的内存。
Description
技术领域
本申请涉及数据通讯领域,特别涉及一种数据包的同步方法、装置、设备及存储介质。
背景技术
用户通过游戏客户端进行游戏时,游戏客户端根据用户的操作生成数据包,并向服务器发送该数据包,服务器根据数据包进行游戏逻辑运算,并将游戏逻辑运算后的数据包同步至参与游戏的所有游戏客户端。
在游戏中,同一时间存在多个游戏客户端向服务器发送数据包,服务器需要根据接收到的数据包的顺序,向各个游戏客户端发送已计算的游戏逻辑,为了保证服务器向游戏客户端同步时不产生顺序错误,对每个参与游戏的游戏客户端分配一个消息队列,每个游戏客户端产生的数据包按照顺序写入自身对应的消息队列中,服务器在读取时各个游戏客户端的数据包时不会产生顺序错误。
上述技术方案中,服务器需要为每个游戏客户端分配一个消息队列,使得服务器需要为消息队列预留较大的内存。
发明内容
本申请实施例提供了一种数据包的同步方法、装置、设备及存储介质,通过对每个逻辑线程分配对应的消息队列,减少了消息队列在服务器中所占的内存。所述技术方案如下方案。
根据本申请的一方面,提供了一种数据包的同步方法所述方法应用于服务器中,所述服务器设置有k个逻辑线程和k个消息队列,k为正整数,所述逻辑线程和所述消息队列一一对应,所述逻辑线程是根据逻辑运算类型划分的,所述方法包括:
接收客户端发送的数据包,所述数据包携带有线程标识和帧标识,所述线程标识是所述客户端根据所述数据包需要的逻辑运算类型添加的,所述帧标识用于标识触发所述数据包时的画面帧;
将所述数据包发送至与所述线程标识对应的逻辑线程进行逻辑运算后,将运算后的数据包写入至与所述逻辑线程对应的消息队列中;
根据所述帧标识从所述消息队列中读取所述运算后的数据包,将所述运算后的数据包同步至至少一个关联客户端中。
根据本申请的另一方面,提供了一种数据包的同步装置,所述装置包括:
接收模块,用于接收客户端发送的数据包,所述数据包携带有线程标识和帧标识,所述线程标识是所述客户端根据所述数据包需要的逻辑运算类型添加的,所述帧标识用于标识触发所述数据包时的画面帧;
写入模块,用于将所述数据包发送至与所述线程标识对应的逻辑线程进行逻辑运算后,将运算后的数据包写入至与所述逻辑线程对应的消息队列中;
读取模块,用于根据所述帧标识从所述消息队列中读取所述运算后的数据包,将所述运算后的数据包同步至至少一个关联客户端中。
根据本申请的另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述方面所述的数据包的同步方法。
根据本申请的另一方面,提供了一种计算机可读存储介质,所述可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述方面所述的数据包的同步方法。
根据本申请的另一方面,提供了一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中。计算机设备的处理器从所述计算机可读存储介质读取所述计算机指令,所述处理器执行所述计算机指令,使得所述计算机设备执行如上方面所述的数据包的同步方法。
本申请实施例提供的技术方案带来的有益效果至少包括如下效果。
通过对根据逻辑运算类型划分的逻辑线程分配对应的消息队列,使得服务器将经过逻辑线程运算后的数据包写入每个逻辑线程对应的消息队列中,避免了多个线程共用一个消息队列时产生数据包写入冲突的情况;同时,减少了消息队列的数量,减少了消息队列所占用的服务器内存,从而降低了管理消息的成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个示例性实施例提供的计算机系统的框架图;
图2是本申请一个示例性实施例提供的状态同步技术的示意图;
图3是本申请一个示例性实施例提供的数据包的同步方法的流程图;
图4是本申请一个示例性实施例提供的数据包的同步方法的框架示意图;
图5是本申请另一个示例性实施例提供的数据包的同步方法的流程图;
图6是本申请另一个示例性实施例提供的数据包的同步方法的框架示意图;
图7是本申请另一个示例性实施例提供的数据包的同步方法的流程图;
图8是本申请另一个示例性实施例提供的数据包的同步方法的框架示意图;
图9是本申请另一个示例性实施例提供的数据包的同步方法的框架示意图;
图10是本申请另一个示例性实施例提供的数据包的同步方法的流程图;
图11是本申请一个示例性实施例提供的m个视野区域的示意图;
图12是本申请一个示例性实施例提供的客户端中的画面的示意图;
图13是本申请一个示例性实施例提供的数据包的同步装置的结构框图;
图14是本申请一个示例性实施例提供的服务器的装置结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先,对本申请实施例涉及的名词进行介绍。
消息队列(Message Queue,MQ):是指一种应用程序间的通信方式,用于存放消息(或数据),消息队列遵循先进先出原则,比如,消息1先于消息2被写入至消息队列中,则在读取消息时,消息1先于消息2被读取。消息的生产者(消息发布者)将消息发布到消息队列中,消息的消费者(消息主动获取者)从消息队列中获取消息,生产者和消费者之间互不干扰。
同步栅栏(Cyclic Barrier,CB):是指在多线程条件下,多个线程互相合作完成一项任务,需要通过同步栅栏在多个线程间进行协调,避免多个线程出现时序错乱的问题。本申请实施例以一帧画面的帧标识作为同步栅栏,当各个消息队列均读取至同一帧标识时(同步栅栏),证明该帧画面对应的数据包被读取完,可读取下一帧画面对应的数据包。
脏标志:是指用于标识当前数据是否与原始数据一致。若当前数据与原始数据不一致,则重新计算当前数据并将脏标志由0变为1,针对计算后的结果重新设置一个脏标志(该脏标志为0);若当前数据与原始数据一致,则保留脏标志为1继续使用原始数据(当前数据)。脏标志为0代表数据没有改变,脏标志为1代表数据发生改变。本申请实施例以对虚拟对象的属性参数设置脏标志为例进行说明,属性参数是第二类型数据包(如属性数据包)的数据。示意性的,对虚拟对象的生命值设置脏标志,当虚拟对象的生命值发生变化(恢复或减少),脏标志由0变为1;当虚拟对象的生命值未发生变化,脏标志仍为0。
云计算(Cloud Computing):指互联网技术(Internet Technology,IT)基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计算是网格计算(Grid Computing )、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(UtilityComputing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。
随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不同于以往的并行分布式计算,云计算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。本申请实施例提供的数据同步方法可应用于云服务器中,通过对每个逻辑线程分配对应的消息队列,使得云服务器在读取数据包时,数据包的顺序不会发生错乱,从而按照正确的顺序将数据包发送至各个客户端,降低了管理消息的成本。
图1示出了本申请一个示例性实施例提供的计算机系统的结构框图。该计算机系统100包括:第一终端120、服务器140和第二终端160。
第一终端120安装和运行有支持虚拟环境的应用程序。该应用程序可以是虚拟现实应用程序、三维地图程序、军事仿真程序、第一人称射击游戏(First-Person ShootingGame,FPS)、多人在线战术竞技游戏(Multiplayer Online Battle Arena,MOBA)、大型多人在线角色扮演游戏(Massive Multiplayer Online Role-Playing Game, MMORPG)、多人枪战类生存游戏、大逃杀类型的射击游戏、虚拟现实(Virtual Reality,VR)应用程序、增强现实(Augmented Reality,AR)程序中的任意一种。第一终端120是第一用户使用的终端,第一用户使用第一终端120控制位于虚拟环境中的第一虚拟对象进行活动,该活动包括但不限于:调整身体姿态、行走、奔跑、跳跃、骑行、瞄准、拾取、释放技能、更换皮肤、攻击其他虚拟对象中的至少一种。示意性的,第一虚拟对象是第一虚拟人物,比如仿真人物对象或动漫人物对象。
第一终端120通过无线网络或有线网络与服务器140相连。
服务器140可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。示意性的,服务器140包括处理器144和存储器142,存储器142又包括接收模块1421、控制模块1422和发送模块1423,接收模块1421用于接收客户端发送的数据包,如第i帧虚拟环境画面生成的数据包;控制模块1422用于从消息队列中读取数据包;发送模块1423用于向各个客户端发送数据包。服务器140还用于为支持三维虚拟环境的应用程序提供后台服务,如信息保存服务。可选地,服务器140承担主要计算工作,第一终端120和第二终端160承担次要计算工作;或者,服务器140承担次要计算工作,第一终端120和第二终端160承担主要计算工作;或者,服务器140、第一终端120和第二终端160三者之间采用分布式计算架构进行协同计算。
服务器140可以采用同步技术使得多个客户端之间的画面表现一致。示例性的,服务器140采用的同步技术包括:状态同步技术或帧同步技术。本申请实施例提供的数据包的同步方法以状态同步技术实现。
状态同步技术。
在基于图1的可选实施例中,服务器140采用状态同步技术与多个客户端之间进行同步。在状态同步技术中,如图2所示,战斗逻辑运行在服务器140中。当虚拟环境中的某个虚拟对象发生状态变化时,由服务器140向所有的客户端,比如客户端1至10,发送状态同步结果。
在一个示例中,客户端1向服务器140发送请求,该请求用于请求虚拟对象1攻击虚拟对象2,则服务器140判断虚拟对象1是否能够攻击虚拟对象2,以及当虚拟对象1执行攻击虚拟对象2的操作时,虚拟对象2的剩余生命值。然后,服务器140将虚拟对象2的剩余生命值发送给所有的客户端,所有的客户端根据虚拟对象2的剩余生命值更新本地数据以及界面表现。
第二终端160安装和运行有支持虚拟环境的应用程序。该应用程序可以是虚拟现实应用程序、三维地图程序、军事仿真程序、FPS游戏、MOBA游戏、MMORPG游戏、多人枪战类生存游戏、大逃杀类型的射击游戏、虚拟现实(Virtual Reality,VR)应用程序、增强现实(Augmented Reality,AR)程序中的任意一种。第二终端160是第二用户使用的终端,第二用户使用第二终端160控制位于虚拟环境中的第二虚拟对象进行活动,该活动包括但不限于:调整身体姿态、行走、奔跑、跳跃、骑行、瞄准、释放技能、更换皮肤、拾取、攻击其他虚拟对象中的至少一种。示意性的,第二虚拟对象是第二虚拟人物,比如仿真人物对象或动漫人物对象。
可选地,第一虚拟人物对象和第二虚拟人物对象处于同一虚拟环境中。可选地,第一虚拟人物对象和第二虚拟人物对象可以属于同一个队伍、同一个组织、同一个阵营、具有好友关系或具有临时性的通讯权限。可选地,第一虚拟人物和第二虚拟对象也可以属于不同阵营、不同队伍、不同的组织或具有敌对关系。
可选地,第一终端120和第二终端160上安装的应用程序是相同的,或两个终端上安装的应用程序是不同操作系统平台(安卓或IOS)上的同一类型应用程序。第一终端120可以泛指多个终端中的一个,第二终端160可以泛指多个终端中的一个,本实施例仅以第一终端120和第二终端160来举例说明。第一终端120和第二终端160的设备类型相同或不同,该设备类型包括:智能手机、平板电脑、电子书阅读器、MP3播放器、MP4播放器、膝上型便携计算机和台式计算机中的至少一种。以下实施例以终端包括智能手机来举例说明。
本领域技术人员可以知晓,上述终端的数量可以更多或更少。比如上述终端可以仅为一个,或者上述终端为几十个或几百个,或者更多数量。本申请实施例对终端的数量和设备类型不加以限定。
图3示出了本申请一个示例性实施例提供的数据包的同步方法的流程图。本实施例以该方法用于如图1所示的计算机系统100中的服务器140为例进行说明,服务器140设置有k个逻辑线程和k个消息队列,k为正整数,逻辑线程和消息队列一一对应,逻辑线程是根据逻辑运算的类型进行划分的,该方法包括如下步骤。
步骤301,接收客户端发送的数据包,数据包携带有线程标识和帧标识,线程标识是客户端根据数据包需要的逻辑运算类型添加的,帧标识用于标识触发数据包时的画面帧。
终端上运行有各种客户端,客户端是指向服务器发送数据包的客户端。
以客户端为游戏客户端为例,当用户在游戏客户端中进行一些操作时,游戏客户端根据用户的操作生成数据包,并将数据包发送至服务器。可以理解的是,服务器与多个游戏客户端相连,多个游戏客户端均能够向服务器发送数据包。
示意性的,数据包中包括用户的操作产生的控制数据、虚拟对象的属性变化对应的数据、操作作用的对象对应的数据(如瞄准或攻击的对象)、动画特效的数据和虚拟环境画面变化的数据中的至少一种。客户端根据数据包中的数据需要进行的逻辑运算类型对数据包添加线程标识,示意性的,逻辑运算的类型包括技能逻辑运算、属性逻辑运算、位置逻辑运算、操作逻辑运算和动画效果逻辑运算中的至少一种。
示意性的,客户端生成的数据包中包括各类数据,不同种类的数据需要不同类型的逻辑线程进行逻辑运算。本申请实施例以一个数据包中的数据属于同一类型的数据,即需要进行同种类型的逻辑运算为例。线程标识为线程的编号,比如,线程标识为线程1、线程2、……线程k,k为正整数。
示意性的,客户端根据每帧画面帧生成数据包,该数据包中携带有该帧画面帧的帧标识,用于区分不同的画面帧,帧标识是按照时间顺序排列下的画面帧所具有的标识。示意性的,帧标识为帧的序号,比如,帧标识为帧1(第一帧)、帧2(第二帧)、……帧j(第j帧),j为正整数。
步骤302,将数据包发送至与线程标识对应的逻辑线程进行逻辑运算后,将运算后的数据包写入至与逻辑线程对应的消息队列中。
服务器在接收到数据包时需要根据数据包中的数据进行逻辑运算,比如,数据包中的数据是关于用户控制虚拟对象(游戏中被用户控制的虚拟角色)释放技能的数据,服务器需要对该数据包进行技能类型的逻辑运算,即通过技能类型的逻辑线程对数据包进行技能类型的逻辑运算。因此,该数据包中携带有关于技能类型的逻辑线程的线程标识。
由于每个逻辑线程分配有对应的消息队列,则逻辑线程直接将经过逻辑运算后的数据包写入与逻辑线程对应的消息队列。
如图4所示,其示出了7个逻辑线程和7个消息队列,左侧的多个箭头表示多个逻辑线程(箭头仅为示意不代表逻辑线程的实际数量),7个逻辑线程中的数据包分别写入7个消息队列中。
在一些实施例中,服务器还包括接收数据包的消息队列,该消息队列用于接收客户端发送的数据包,各个逻辑线程根据数据包携带的线程标识从该消息队列中读取对应的数据包。
可以理解的是,一个客户端可发送一个或多个数据包,当客户端发送多个数据包时,该多个数据包所需要进行的逻辑运算类型可以相同或不同,则一个客户端发送的数据包可能被分配在各个逻辑线程中。各个逻辑线程中可能有每个客户端发送的数据包。
步骤303,根据帧标识从消息队列中读取运算后的数据包,将运算后的数据包同步至至少一个关联客户端中。
根据帧标识对应的时间戳顺序从消息队列中读取运算后的数据包,将运算后的数据包同步至至少一个关联客户端中。服务器从消息队列中读取数据包时,为了避免客户端接收到的数据包对应的画面帧的顺序是错乱的,服务器从消息队列中一帧一帧地读取数据包,数据包是按照画面对应的时间戳顺序产生的,即由早到晚的顺序。因此,每个数据包携带的帧标识也是按照时间戳顺序排序的。
示意性的,服务器在读取消息队列中的数据包时,是按照一帧一帧的方式读取的,即读取完第1帧画面帧对应的数据包,读取第2帧画面帧对应的数据包,第2帧画面产生的时间晚于第1帧画面产生的时间。服务器对每帧画面帧对应的数据包进行逻辑运算,将运算后的数据包发送至关联客户端,关联客户端对运算后的数据包进行处理,得到对应的画面帧。
可以理解的是,由于消息队列与逻辑线程一一对应,一帧画面帧对应的数据包可能分散在各个消息队列中,服务器在读取一帧画面帧对应的数据包时,需要将每个消息队列中的该帧画面帧对应的数据包均读取完,当全部消息队列中的该帧画面对应的数据包读取完毕,则该帧画面帧对应的数据包读取完毕,服务器将读取完的数据包同步发送至至少一个关联客户端中。
在一些实施例中,如图4所示,服务器还包括发包线程,该发包线程为单线程,保证调用发送数据包的应用程序接口(Application Programming Interface,API)的数据是安全的。
关联客户端是指与发送数据包的客户端具有关联关系的客户端,示意性的,发送数据包的客户端与关联客户端是参与同一局游戏的客户端。在一些实施例中,发送数据包的客户端登录的用户帐号与关联客户端登录的用户帐号具有好友关系,发送数据包的客户端登录的用户帐号与关联客户端登录的用户帐号在同一临时会话消息中或在同一群组聊天中。
综上所述,本实施例提供的方法,通过对根据逻辑运算类型划分的逻辑线程分配对应的消息队列,使得服务器将经过逻辑线程运算后的数据包写入每个逻辑线程对应的消息队列中,避免了多个逻辑线程共用一个消息队列时产生数据包写入冲突的情况;同时,减少了消息队列的数量,减少了消息队列所占用的服务器内存,从而降低了管理消息的成本。
图5示出了本申请另一个示例性实施例提供的数据包的同步方法的流程图。本实施例以该方法用于如图1所示的计算机系统100中的服务器140为例进行说明,服务器140设置有k个逻辑线程和k个消息队列,k为正整数,逻辑线程和消息队列一一对应,逻辑线程是根据逻辑运算的类型进行划分的,该方法包括如下步骤。
步骤501,接收客户端发送的数据包,数据包携带有线程标识和帧标识,线程标识是客户端根据数据包需要的逻辑运算类型添加的,帧标识用于标识触发数据包时的画面帧。
终端上运行有各种客户端,客户端是指向服务器发送数据包的客户端。
以客户端为游戏客户端为例,当用户在游戏客户端中进行一些操作时,游戏客户端根据用户的操作生成数据包,并将数据包发送至服务器。可以理解的是,服务器与多个游戏客户端相连,多个游戏客户端均能够向服务器发送数据包。
示意性的,数据包中包括用户的操作产生的控制数据、虚拟对象的属性变化对应的数据、操作作用的对象对应的数据(如瞄准或攻击的对象)、动画特效的数据和虚拟环境画面变化的数据中的至少一种。客户端根据数据包中的数据需要进行的逻辑运算类型对数据包添加线程标识,示意性的,逻辑运算的类型包括技能逻辑运算、属性逻辑运算、位置逻辑运算、操作逻辑运算和动画效果逻辑运算中的至少一种。
示意性的,客户端生成的数据包中包括各类数据,不同种类的数据需要不同类型的逻辑线程进行逻辑运算。本申请实施例以一个数据包中的数据属于同一类型的数据,即需要进行同种类型的逻辑运算为例。线程标识为线程的编号,比如,线程标识为线程1、线程2、……线程k,k为正整数。
示意性的,客户端根据每帧画面帧生成数据包,该数据包中携带有该帧画面帧的帧标识,用于区分不同的画面帧。示意性的,帧标识为帧的序号,比如,帧标识为帧1(第一帧)、帧2(第二帧)、……帧j(第j帧),j为正整数。
步骤502,根据线程标识将数据包发送至k个逻辑线程中的第i个逻辑线程, i为正整数,且i≤k。
服务器根据一个数据包中的线程标识将该数据包分配至对应的逻辑线程。比如,一个数据包中携带有第i个逻辑线程的线程标识,服务器将该数据包分配至该第i个逻辑线程。可以理解的是,一个客户端可发送一个或多个数据包,当客户端发送多个数据包时,该多个数据包所需要进行的逻辑运算类型可以相同或不同,则一个客户端发送的数据包可能分配在各个逻辑线程中。各个逻辑线程中可能有每个客户端发送的数据包。
在一些实施例中,服务器还包括接收数据包的消息队列,该消息队列用于接收客户端发送的数据包,各个逻辑线程根据线程标识从该消息队列中读取对应的数据包。
步骤503,通过第i个逻辑线程对数据包进行逻辑运算,得到运算后的数据包。
示意性的,以游戏客户端为例,游戏客户端向服务器发送的数据包中包括操作数据,该操作数据用于记录用户在游戏客户端中的操作,比如,该操作数据是关于用户控制虚拟对象释放技能的数据。该数据包被分配至第i个逻辑线程中,第i个逻辑线程根据该数据包中的数据进行逻辑运算,比如,第i个逻辑线程进行的逻辑运算是虚拟对象释放技能后的作用范围和作用效果(被该技能作用的虚拟对象的生命值是否会降低,降低多少)。逻辑线程将该释放技能后的作用范围和作用效果对应的数据生成运算后的数据包。
步骤504,将运算后的数据包写入与第i个逻辑线程对应的第i个消息队列中。
由于逻辑线程与消息队列一一对应,则第i个逻辑线程对应的第i个消息队列中,服务器将运算后的数据包写入与第i个逻辑线程对应的第i个消息队列中。可以理解的是,一个消息队列中可能包括目标客户端发送的一个或多个数据包,一个消息队列中可能包括一帧画面帧对应的一个数据包或多个数据包。
步骤505,确定k个消息队列当前消费的帧标识。
示意性的,服务器设置有消息队列的消费规则,该消费规则规定以第i个消息队列为准,第i个消息队列当前消费的数据包具有的帧标识为所有消息队列当前消费的数据包所要具有的帧标识,i为正整数,且i≤k。比如,服务器包括8个消息队列,分别为第1消息队列、第2消息队列……第8消息队列,消费规则规定以第1消息队列为准,第1消息队列当前消费的数据包具有的帧标识为所有消息队列当前消费的数据包所要具有的帧标识,第1消息队列当前消费的数据包具有的帧标识为第1帧画面帧对应的帧标识(帧1),则当前消费的帧标识为帧1,其余消息队列也要消费具有帧标识为帧1的数据包。
步骤506,从k个消息队列中,读取与当前消费的帧标识对应的数据包。
示意性的,根据上述消费规则,服务器从k个消息队列中读取具有帧标识为帧1的数据包。
步骤507,将当前消费的帧标识对应的数据包同步至至少一个关联客户端中。
示意性的,如图4所示,服务器还包括发包线程(右侧箭头所示),该发包线程为单线程,服务器将当前消费的帧标识对应的数据包发送至发包线程,通过发包线程将当前消费的帧标识对应的数据包同步至至少一个关联客户端中。在一些实施例中,发包线程从消息队列中主动读取数据包,并将读取到的数据包同步至各个关联客户端中。
如图6所示,消息队列1中写入了数据包A1和数据包C3,消息队列2中写入了数据包B2,写入顺序为:数据包A1→数据包B2→数据包C3。示意性的,数据包A1、数据包C3和数据包B2分别属于不同的画面帧,则发包线程的发包顺序为:数据包A1→数据包B2→数据包C3。
综上所述,本实施例提供的方法,通过根据处理数据包的逻辑线程分配对应的消息队列,在将数据包写入每个逻辑线程对应的消息队列中时,避免了多个逻辑线程共用一个消息队列时产生写入冲突的情况;同时,减少了消息队列的数量,降低了消息队列占用服务器内存的情况,从而降低了管理消息的成本。
通过数据包携带的线程标识确定处理数据包的逻辑线程,从而保证后续将运算后的数据包写入消息队列时不会出现时序性错误的问题。
通过确定消息队列当前消费的帧标识,使得所有消息队列统一读取具有同一帧标识的画面帧对应的数据包,从而保证即使同一帧的数据包不在同一消息队列中,也不会出现跨帧发送数据包的现象,避免客户端在接收数据包时产生时序错误。
基于图5的可选实施例中,从消息队列中读取数据包的方法包括如下两种方式。
1、将一个消息队列中同一帧画面帧对应的数据包读取完毕,再读取下一个消息队列中该帧画面帧的数据包,以此类推,直到所有消息队列中该帧画面帧对应的数据包被读取完。
上述步骤506可以替换为如下步骤,如图7所示。
步骤5061a,响应于当前消费的帧标识是第一帧标识,从第i个消息队列中读取具有第一帧标识的数据包。
为了防止同一帧画面帧对应的数据包跨帧发送,服务器在k个消息队列中分别插入同步栅栏,示意性的,以画面帧对应的帧标识为同步栅栏,比如,将k个消息队列中插入第j帧画面的第一帧标识,该第一帧标识为同步栅栏,j为正整数。
示意性的,第一帧标识为第3帧画面的帧标识(帧3),服务器从第1个消息队列中读取具有的帧标识为帧3的数据包。
步骤5062a,响应于第i个消息队列读取完毕,开始从第i+1个消息队列中读取具有第一帧标识的数据包。
示意性的,当第1个消息队列中第3帧画面帧对应的数据包读取完后,从第2个消息队列中读取第3帧画面帧对应的数据包。如图8所示,在消息队列中插入同步栅栏11和同步栅栏12,示意性的,同步栅栏11用于从消息队列中读取属于第1帧画面帧对应的数据包,同步栅栏12用于从消息队列中读取属于第2帧画面帧对应的数据包,当所有消息队列中属于第1帧画面帧对应的数据包读取完毕时,再读取消息队列中属于第2帧画面帧对应的数据包。需要说明的是,图8示出的同步栅栏的位置仅为示意,每个消息队列中同一帧画面帧对应的同步栅栏在消息队列中的位置可能相同或不同,该位置取决于该消息队列中属于同一帧画面帧的数据包的数量。
步骤5063a,重复上述读取具有第一帧标识的数据包的两个步骤,直至k个消息队列中具有第一帧标识的数据包均读取完毕。
重复执行步骤5061a和步骤5062a,即第1个消息队列中的第3帧画面帧对应的数据包读取完毕,从第2个消息队列中读取第3帧画面帧对应的数据包,当第2个消息队列中的第3帧画面帧对应的数据包读取完毕,从第3个消息队列中读取第3帧画面帧对应的数据包,以此类推,直到所有的消息队列中的第3帧画面帧对应的数据包被读取完毕。
2、从一个消息队列中读取同一帧画面帧对应的部分数据包,当该部分数据包读取完毕,再读取下一个消息队列中该帧画面帧对应的部分数据包,以此类推,直到所有消息队列中该帧画面帧对应的数据包被读取完。
上述步骤506可以替换为如下步骤,如图7所示。
步骤5061b,获取第i个消息队列对应的时长阈值。
为了防止同一帧画面帧对应的数据包跨帧发送,服务器在k个消息队列中分别插入同步栅栏,示意性的,以画面帧对应的帧标识为同步栅栏,比如,将k个消息队列中插入第j帧画面的第一帧标识,该第一帧标识为同步栅栏,j为正整数。
此外,在服务器读取一个消息队列中的数据包时,其他消息队列一直处于等待状态,尤其是最后一个消息队列,需要等待前面所有的消息队列中的数据包被读取完毕后,该消息队列中的数据包才能被读取,而服务器还会将逻辑线程中的数据包不断地写入消息队列中,易于造成消息队列阻塞,因此,服务器为消息队列设置有时长阈值,k个消息队列分别对应有各自的时长阈值。每个消息队列对应的时长阈值可以相等或不等。
时长阈值是通过消息队列对应的消费时长得到的,消费时长是从消息队列中读取一帧画面帧对应的数据包的预估时长。示意性的,服务器根据消费队列中具有同一帧标识的数据包的数量对消息队列消费该帧数据包所要消耗的时长进行预估,得到消费时长,则服务器对该消费时长进行划分,得到时长阈值。示意性的,同一消息队列对应的消费时长可以相等或不等,同一消息队列对应的多个时长阈值可以相等或不等。不同消息队列对应的消费时长可以相等或不等,不同消息队列对应的时长阈值可以相等或不等。
如图9所示,每个消息队列的时长阈值以划分后的时间片13进行表示(图9中的虚线),即对消费同一帧画面帧对应的数据包所在的消息队列的消费时长进行划分。时间片(Time Slice)又称为“量子(quantum)”或“处理器片(Processor Slice)”是分时操作系统分配给每个正在运行的线程微观上的一段中央处理器(Central Processing Unit,CPU)时间。需要说明的是,划分后的得到的各个时间片13可以是被均等划分或被不均等划分,图9中时间片13的位置仅为示意。
示意性的,第i个消息队列对应的时长阈值为100秒。
步骤5062b,读取第i和消息队列中具有第一帧标识的数据包。
服务器在时长阈值内读取第i个消息队列中具有第一帧标识的数据包。比如,第3个消息队列对应的时长阈值为100秒,服务器在100秒内读取第3个消息队列中第3帧画面帧对应的数据包。
步骤5063b,响应于第i个消息队列的读取时长超过时长阈值,开始从第i+1个消息队列中读取具有第一帧标识的数据包。
示意性的,在读取消息队列中的数据包时进行倒计时,比如,当服务器开始读取第3个消息队列中第3帧画面帧对应的数据包时,启动倒计时100秒。当100秒倒计时结束时,服务器停止读取第3个消息队列中的第3帧画面帧对应的数据包,并开始从第4个消息队列中读取第3帧画面帧对应的数据包。
示意性的,在读取消息队列中的数据包时进行正计时,比如,当服务器开始读取第3个消息队列中第3帧画面帧对应的数据包时,启动计时器,当计时器的计时超过(或等于)100秒时,服务器停止读取第3个消息队列中的第3帧画面帧对应的数据包,并开始从第4个消息队列中读取第3帧画面帧对应的数据包。
步骤5064b,重复上述读取具有第一帧标识的数据包的三个步骤,直至k个消息队列中具有第一帧标识的数据包均读取完毕。
重复执行步骤5061b至步骤5063b,示意性的,每个消息队列对应的时长阈值相等,均为100秒,则在100秒内读取第1个消息队列中的第3帧画面帧对应的数据包,然后再重新计时100秒,在100秒内从第2个消息队列中读取第3帧画面帧对应的数据包,然后再重新计时100秒,在100秒内从第3个消息队列中读取第3帧画面帧对应的数据包,以此类推,当第k个消息队列也进行100秒内读取数据包的操作之后,再次从第1个消息队列中开始读取。首先判断第1个消息队列中是否还具有第3帧画面帧对应的数据包,若第1个消息队列中具有第3帧画面帧对应的数据包,则继续按照时长阈值读取第3帧画面帧对应的数据包,若第1个消息队列中不具有第3帧画面帧对对应的数据包,从第2个消息队列中读取第3帧画面帧对应的数据包,同样地,需要判断第2个消息队列中是否还具有第3帧画面帧对应的数据包。以此类推,直到所有的消息队列中的第3帧画面帧对应的数据包被读取完毕。
综上所述,本实施例提供的方法,通过利用帧标识作为同步栅栏,使得服务器在读取各个消息队列中属于同一帧画面帧的数据包时,当一帧画面帧对应的数据包被读取完,才能读取下一帧画面帧的数据包,避免出现跨帧发送数据包的情况。
通过对各个消息队列对应的消费时长进行划分,使得服务器每次只读取每个消息队列中属于同一帧画面帧的部分数据包,避免排序较后的消息队列等待的时间过长,从而避免出现消息队列因不断写入数据包而产生阻塞的现象。
基于上述发包机制,存在一些数据包携带的数据较多,使得客户端在接收到数据包时,需要消耗较多的资源去加载数据包。以游戏客户端为例,用户使用的终端是智能手机,用户在智能手机上玩MMORPG游戏时,需要使用网络,如无线网络中的无线保真网络(Wireless Fidelity,WiFi),或移动通信网络(网络运营商提供的网络流量)。以移动通信网络为例,若数据包包含的数据越多,则需要消耗的网络流量越大。因此,为了避免消耗较多网络流量,对数据包包含的数据进行滤除。
比如,客户端受限于自身视野,对于视野内的虚拟对象,只有一小部分显示成模型,比如视野内有80个虚拟对象,用户只能看见10个虚拟对象的是完整模型,而剩下的70个虚拟对象则只显示昵称(或用户帐号)。客户端会显示70个虚拟对象的昵称和生命值,不会展示特效。既然无法展示特效,那么其技能相关的数据包无需发送至关联客户端。
基于图5的可选实施例中,对数据包的过滤方式为三级过滤,过滤方式包括如下步骤,如图10所示。
1、第一级滤除。
步骤210,根据第一位置坐标对画面帧进行视野区域划分,得到m个视野区域,m为正整数。
服务器存储有客户端控制的第一虚拟对象的第一位置坐标,与当前消费的帧标识对应的数据包包括第一类型数据包,第一类型数据包携带有画面帧中的第二虚拟对象的第二位置坐标。示意性的,第一类型数据包为战斗包,战斗包用于包括关于虚拟对象释放技能的数据、关于虚拟对象参与对战的数据、关于更换技能或更换武器的数据等。
步骤220,响应于第二位置坐标不位于m个视野区域中的指定视野区域,在与当前消费的帧标识对应的数据包中滤除第一类型数据包。
示意性的,第二虚拟对象的位置坐标不在m个视野区域之内,在与当前消费的帧标识对应的数据包中滤除第一类型数据包。即服务器将位于m个视野区域内的虚拟对象对应的数据包发送至控制第一虚拟对象的客户端,如图11所示,m取值为9,第一虚拟对象14的视野内包括A、B、C、D四个虚拟对象,则将虚拟对象A、虚拟对象B、虚拟对象C和虚拟对象D对应的数据包发送至控制第一虚拟对象14的客户端,该客户端显示有虚拟对象A、虚拟对象B、虚拟对象C和虚拟对象D。需要说明的是,客户端上不显示九宫格视野。
在另一个示例中,第二虚拟对象的位置坐标不在九宫格视野中的第一宫格内,即如图11所示的序号1对应的宫格,则服务器将第一宫格中的其他虚拟对象对应的数据包发送至第一虚拟对象14的客户端。
2、第二级滤除。
步骤230,获取m个视野区域对应的视野列表,视野列表包括位于m个视野区域内q个第二虚拟对象,q为预设的数量上限,q为正整数。
m个视野区域可能会存在多个虚拟对象,但m个视野区域中存在的多个虚拟对象不会全部显示在客户端,通过视野列表对m个视野区域中存在的虚拟对象的数量上限进行设置。
步骤240,响应于第一类型数据包对应的第二虚拟对象不属于视野列表,在与当前消费的帧标识对应的数据包中滤除第一类型数据包。
示意性的,m为9,当第二虚拟对象进入九宫格视野且第二虚拟对象在进入视野列表时,超过视野列表规定的数量,服务器将第一类型数据包从与当前消费的帧标识对应的数据包中滤除。即将第二虚拟对象对应的数据包滤除,控制第一虚拟对象的客户端将不显示第二虚拟对象。
3、第三级滤除。
步骤250,获取第一位置坐标和第二位置坐标之间的位置关系。
步骤260,响应于位置关系满足预设条件,在与当前消费的帧标识对应的数据包中滤除第一类型数据包。
示意性的,预设条件包括如下条件中的至少一种:
第一虚拟对象与二虚拟对象之间的距离大于距离阈值;
第二虚拟对象位于所述第一虚拟对象的视野外。
如图11所示,针对于第一虚拟对象14,第一虚拟对象14面向的方向是箭头指向的方向,虚拟对象A和虚拟对象B位于第一虚拟对象的前方,虚拟对象C和虚拟对象D位于第一虚拟对象14的后方。示意性的,虚拟对象D为第二虚拟对象,虚拟对象D与第一虚拟对象14的距离大于距离阈值,则在与当前消费的帧标识对应的数据包中滤除第一类型数据包,即第一虚拟对象14对应的客户端不显示虚拟对象D。示意性的,虚拟对象C为第二虚拟对象,虚拟对象C位于第一虚拟对象14的视野外,则在与当前消费的帧标识对应的数据包中滤除第一类型数据包,即第一虚拟对象14对应的客户端不显示虚拟对象D。示意性的,虚拟对象C和虚拟对象D在第一虚拟对象14对应的客户端中不显示有虚拟对象C和虚拟对象D两者的模型以及两者的名字,且虚拟对象C和虚拟对象D之间进行交互(如互相攻击)的活动也不显示在该客户端中。
如图12所示,该画面为客户端接收了已滤除第一类型数据包后的数据包所触发的显示画面,在该画面上显示有有限个虚拟对象,该画面是以客户端控制的第一虚拟对象的视野形成的画面。示意性的,距离第一虚拟对象较近的虚拟对象21显示较为精细的形象模型,距离第一虚拟对象较远的虚拟对象22和虚拟对象23显示示意的形象模型,以降低客户端加载数据包时所要消耗的资源。
综上所述,本实施例提供的方法,通过对当前消费的帧标识对应的数据包进行滤除,减小同步至关联客户端中的数据包包括的数据,客户端在加载经过滤除的数据包可降低客户端消耗的资源。
可以理解的是,上述三级滤除的方式可分别单独实施,也可任意两两组合实施,还可以全部实施。
在一些实施例中,数据包包括一些不能被滤除的重要数据,则通过降低发送频率来降低客户端加载数据包时消耗的资源。
示意性的,与当前消费的帧标识对应的数据包还包括第二类型数据包,第二类型的数据包携带有虚拟对象的属性参数。以第二类型包为属性数据包为例进行说明,属性参数包括虚拟对象的生命值、能量值、魔法值、攻击力中的至少一种数据。
响应于属性参数未发生改变,降低第二类型数据包的发送频率。
示意性的,服务器针对属性参数设置有脏标志,利用脏标志判断虚拟对象的属性参数是否发生变化。比如,每500毫秒检查一次脏标志,若脏标志发生未变化,证明第二类型数据包未发生变化,则不向客户端发送第二类型数据包;若脏标志发生变化,证明第二类型数据包发生变化,则向客户端发送第二类型数据包,并重新对该第二类型数据包对应的属性参数设置脏标志。
综上所述,本实施例提供的方法,通过利用脏标志的变化确定属性参数是否发生变化,从而当属性参数不发生变化时,降低第二类型数据包的发送频率,进而降低客户端加载第二类型的数据包所要消耗的资源。
在一些实施例中,上述对第一类型数据包进行裁剪或降频发送的步骤可以通过逻辑线程进行滤除处理后,再写入消息队列中,或者,从读取消息队列之后,从读取到的数据包中进行滤除。
在一个示例中,数据包的同步方法的整体流程包括如下流程。
服务器中包括多个逻辑线程,该逻辑线程用于根据客户端发送的数据包运算逻辑。
写入过程:
示意性的,以游戏为例,服务器中的每个逻辑线程用于运算游戏逻辑。服务器对每个逻辑线程分配有消息队列,参与游戏的客户端会产生大量的数据包,示意性的,客户端将一帧虚拟环境画面对应的数据包发送至服务器。服务器根据数据包中携带的线程标识将一帧虚拟环境画面对应的数据包写入各个消息队列中。服务器在接收数据包时还记录有各个数据包的接收顺序,按照接收顺序将数据包写入各个消息队列中,即写入同一消息队列中的数据包之间的顺序是固定的。
读取过程:
服务器将每一帧虚拟环境画面帧的帧标识作为同步栅栏插入至各个消息队列中,服务器指定一个消息队列消费某一帧的数据包。比如,服务器指定第1个消息队列消费第i帧虚拟环境画面帧对应的数据包,并将第i帧标识作为同步栅栏,从第1个消息队列开始,读取第i帧虚拟环境画面帧对应的数据包,并根据该数据包进行游戏逻辑运算,将运算后的数据包发送至各个客户端。然后,服务器读取第2个消息队列,将第2个消息队列中位于同步栅栏之前的数据包,对该数据包进行游戏逻辑运算,将运算后的数据包发送至各个客户端。以此类推,直到所有消息队列中第i帧虚拟环境画面对应的数据包均被读取完。
当第i帧虚拟环境画面帧对应的数据包被读取完后,再读取第i+1帧虚拟环境画面帧对应的数据包,读取第i+1帧虚拟环境画面帧对应的数据包与读取第i帧虚拟环境画面帧对应的数据包的方式一致。
基于上述数据包的发送机制,服务器在消费一个消息队列中的数据包时,其他消息队列处于等待状态。对于最后一个消息队列,需要等待前面所有的消息队列中属于同一画面帧的数据包都被读取后,才会读取最后一个消息队列中的数据包。而消息队列中还在不断地写入客户端发送的数据包,易于造成消息队列的阻塞。
在一些实施例中,服务器对消息队列分配有时间片,时间片具有消息队列消费一帧虚拟环境画面帧的数据包对应的预估时长,服务器对消息队列的时间片进行划分,得到一个消息队列的至少两个划分后的时间片,划分后的时间片具有的时长可以相等或不等。
示意性的,服务器从第1个消息队列开始,根据划分后的时间片具有的时长读取第i帧虚拟环境画面帧对应的数据包。比如,第1个消息队列的划分后的时间片具有的时长是60秒,第1个消息队列的划分后的时间片具有的时长是100秒,服务器从第2个消息队列开始,利用60秒的时间读取第1个消息队列中第i帧虚拟环境画面帧对应的数据包,当划分后的时间片具有的时长为0时,服务器利用100秒的时间读取第2个消息队列中第i帧虚拟环境画面帧对应的数据包。在60秒的时间内,第1个消息队列中第i帧虚拟环境画面帧对应的数据包可能全部被读取,也可能部分被读取。同理,在100秒的时间内,第2个消息队列中第i帧虚拟环境画面帧对应的数据包可能被全部读取,也可能被部分读取。
示意性的,当服务器在60内未将第1个消息队列中第i帧虚拟环境画面帧对应的数据包读取完,则当再次遍历至第1个消息队列时,继续读取第i帧虚拟环境画面帧。
基于上述方式,循环遍历所有消息队列,直至所有消息队列均读取到第i帧标识,则证明第i帧虚拟环境画面帧对应的数据包被读取完,服务器利用上述方式读取第i+1帧虚拟环境画面帧对应的数据包。
通过本实施例提供的方法,对每个逻辑线程分配有消息队列,减少了消息队列的数量,降低了管理消息的成本,通过对消息队列中插入同步栅栏,避免出现跨帧发送数据包的情况。
图13是本申请一个示例性实施例提供的数据包的同步装置的结构框图,该装置包括:
接收模块1310,用于接收客户端发送的数据包,数据包携带有线程标识和帧标识,线程标识是客户端根据数据包需要的逻辑运算类型添加的,帧标识用于标识触发数据包时的画面帧;
写入模块1320,用于将数据包发送至与线程标识对应的逻辑线程进行逻辑运算后,将运算后的数据包写入至与逻辑线程对应的消息队列中;
读取模块1330,用于根据帧标识从消息队列中读取运算后的数据包,将运算后的数据包同步至至少一个关联客户端中。
在一个可选的实施例中,该装置包括发送模块1340和处理模块1350;
所述发送模块1340,用于根据线程标识将数据包发送至k个逻辑线程中的第i个逻辑线程,i为正整数,且i≤k;
所述处理模块1350,用于通过第i个逻辑线程对数据包进行逻辑运算,得到运算后的数据包;
所述写入模块1320,用于将运算后的数据包写入与第i个逻辑线程对应的第i个消息队列中。
在一个可选的实施例中,所述处理模块1350,用于确定k个消息队列当前消费的帧标识;
所述读取模块1330,用于从k个消息队列中,读取与当前消费的帧标识对应的数据包;
所述发送模块1340,用于将当前消费的帧标识对应的数据包同步至至少一个关联客户端中。
在一个可选的实施例中,k个消息队列中插入第j帧画面的第一帧标识;
所述读取模块1330,用于响应于当前消费的帧标识是第一帧标识,从第i个消息队列中读取具有第一帧标识的数据包;
所述读取模块1330,用于响应于第i个消息队列读取完毕,开始从第i+1个消息队列中读取具有第一帧标识的数据包;
所述读取模块1330,用于重复上述读取具有第一帧标识的数据包的两个步骤,直至k个消息队列中具有第一帧标识的数据包均读取完毕。
在一个可选的实施例中,k个消息队列中插入第j帧画面的第一帧标识,j为正整数,k个消息队列分别对应有各自的时长阈值;
所述处理模块1350,用于获取第i个消息队列对应的时长阈值;
所述读取模块1330,用于读取第i个消息队列中具有第一帧标识的数据包;
所述读取模块1330,用于响应于第i个消息队列的读取时长超过时长阈值,开始从第i+1个消息队列中读取具有第一帧标识的数据包;
所述读取模块1330,用于重复上述读取具有第一帧标识的数据包的三个步骤,直至k个消息队列中具有第一帧标识的数据包均读取完毕。
在一个可选的实施例中,时长阈值是通过消息队列对应的消费时长得到的,消费时长是从消息队列中读取一帧画面帧对应的数据包的预估时长。
在一个可选的实施例中,服务器存储有客户端控制的第一虚拟对象的第一位置坐标,与当前消费的帧标识对应的数据包包括第一类型数据包,第一类型数据包携带有画面帧中的第二虚拟对象的第二位置坐标;
所述处理模块1350,用于根据第一位置坐标对画面帧进行视野区域划分,得到m个视野区域,m为正整数;响应于第二位置坐标不位于m个视野区域中的指定视野区域,在与当前消费的帧标识对应的数据包中滤除第一类型数据包。
在一个可选的实施例中,所述处理模块1350,用于获取m个视野区域对应的视野列表,视野列表包括位于m个视野区域内q个第二虚拟对象,q为预设的数量上限,q为正整数;响应于第一类型数据包对应的第二虚拟对象不属于视野列表,在与当前消费的帧标识对应的数据包中滤除第一类型数据包。
在一个可选的实施例中,所述处理模块1350,用于获取第一位置坐标和第二位置坐标之间的位置关系;响应于位置关系满足预设条件,在与当前消费的帧标识对应的数据包中滤除第一类型数据包。
在一个可选的实施例中,预设条件包括如下条件中的至少一种:
第一虚拟对象与第二虚拟对象之间的距离大于距离阈值;
第二虚拟对象位于第一虚拟对象的视野外。
在一个可选的实施例中,与当前消费的帧标识对应的数据包包括第二类型数据包,第二类型数据包携带有虚拟对象的属性参数;
所述处理模块1350,用于响应于属性参数未发生改变,降低属性数据包的发送频率。
在一个可选的实施例中,所述发送模块1330,用于将当前消费的帧标识对应的数据包发送至发包线程中;通过发包线程将数据包同步至至少一个关联客户端中。
综上所述,本实施例提供的装置,通过对根据逻辑运算类型划分的逻辑线程分配对应的消息队列,使得服务器将经过逻辑线程运算后的数据包写入每个逻辑线程对应的消息队列中,避免了多个线程共用一个消息队列时产生数据包写入冲突的情况;同时,减少了消息队列的数量,减少了消息队列所占用的服务器内存,从而降低了管理消息的成本。
通过数据包携带的线程标识确定处理数据包的逻辑线程,从而保证后续将运算后的数据包写入消息队列时不会出现时序性错误的问题。
通过确定消息队列当前消费的帧标识使得所有消息队列统一读取具有同一帧标识的画面帧对应的数据包,从而保证即使同一帧的数据包不在同一消息队列中,也不会出现跨帧发送数据包的现象,避免客户端在接收数据包时产生时序错误。
通过利用帧标识作为同步栅栏,使得服务器在读取各个消息队列中属于同一帧画面帧的数据包时,当一帧画面帧对应的数据包被读取完,才能读取下一帧画面帧的数据包,避免出现跨帧发送数据包的情况。
通过对各个消息队列对应的消费时长进行划分,使得服务器每次只读取每个消息队列中属于同一帧画面帧的部分数据包,避免排序较后的消息队列等待的时间过长,从而使得消息队列因写入数据包而产生阻塞。
通过对当前消费的帧标识对应的数据包进行滤除,减小同步至关联客户端中的数据包包括的数据,客户端在加载经过滤除的数据包可降低客户端消耗的资源。
通过利用脏标志的变化确定属性参数是否发生变化,从而当属性参数不发生变化时,降低第二类型数据包的发送频率,降低客户端加载第二类型的数据包所要消耗的资源。
需要说明的是:上述实施例提供的数据包的同步装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据包的同步装置与数据包的同步方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图14示出了本申请一个示例性实施例提供的服务器的结构示意图。该服务器可以如图1所示的计算机系统100中的服务器140;
服务器140包括中央处理单元(CPU,Central Processing Unit)1401、包括随机存取存储器(RAM,Random Access Memory)1402和只读存储器(ROM,Read Only Memory)1403的系统存储器1404,以及连接系统存储器1404和中央处理单元1401的系统总线1405。服务器140还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统,Input Output System)1406,和用于存储操作系统1413、应用程序1414和其他程序模块1415的大容量存储设备1407;
基本输入/输出系统1406包括有用于显示信息的显示器1408和用于用户输入信息的诸如鼠标、键盘之类的输入设备1409。其中显示器1408和输入设备1409都通过连接到系统总线1405的输入输出控制器1410连接到中央处理单元1401。基本输入/输出系统1406还可以包括输入输出控制器1410以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1410还提供输出到显示屏、打印机或其他类型的输出设备;
大容量存储设备1407通过连接到系统总线1405的大容量存储控制器(未示出)连接到中央处理单元1401。大容量存储设备1407及其相关联的计算机可读介质为服务器140提供非易失性存储。也就是说,大容量存储设备1407可以包括诸如硬盘或者紧凑型光盘只读存储器(CD-ROM,Compact Disc Read Only Memory)驱动器之类的计算机可读介质(未示出)。
计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、可擦除可编程只读存储器(EPROM,Erasable Programmable Read Only Memory)、带电可擦可编程只读存储器(EEPROM, Electrically Erasable Programmable Read Only Memory)、闪存或其他固态存储其技术,CD-ROM、数字通用光盘(DVD,Digital Versatile Disc)或固态硬盘(SSD,Solid State Drives)、其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。其中,随机存取记忆体可以包括电阻式随机存取记忆体(ReRAM,Resistance RandomAccess Memory)和动态随机存取存储器(DRAM,Dynamic Random Access Memory)。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的系统存储器1404和大容量存储设备1407可以统称为存储器。
根据本申请的各种实施例,服务器140还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器140可以通过连接在系统总线1405上的网络接口单元1411连接到网络1412,或者说,也可以使用网络接口单元1411来连接到其他类型的网络或远程计算机系统(未示出)。
上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由CPU执行。
在一个可选的实施例中,提供了一种计算机设备,该计算机设备包括处理器和存储器,存储器中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现如上所述的数据包的同步方法。
在一个可选的实施例中,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现如上所述的数据包的同步方法。
可选地,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、固态硬盘(SSD,Solid State Drives)或光盘等。其中,随机存取记忆体可以包括电阻式随机存取记忆体(ReRAM,Resistance RandomAccess Memory)和动态随机存取存储器(DRAM,Dynamic Random Access Memory)。上述本申请实施例序号仅为了描述,不代表实施例的优劣。
本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从该计算机可读存储介质读取该计算机指令,该处理器执行该计算机指令,使得该计算机设备执行如上所述的数据包的同步方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (13)
1.一种数据包的同步方法,其特征在于,所述方法应用于服务器中,所述服务器设置有k个逻辑线程和k个消息队列,k为正整数,所述逻辑线程和所述消息队列一一对应,所述逻辑线程是根据逻辑运算类型划分的,所述方法包括:
接收客户端发送的数据包,所述数据包携带有线程标识和帧标识,所述线程标识是所述客户端根据所述数据包需要的逻辑运算类型添加的,所述帧标识用于标识触发所述数据包时的画面帧;
将所述数据包发送至与所述线程标识对应的逻辑线程进行逻辑运算后,将运算后的数据包写入至与所述逻辑线程对应的消息队列中;
确定所述k个消息队列当前消费的帧标识,所述k个消息队列中插入第j帧画面的第一帧标识,j为正整数;
响应于所述当前消费的帧标识是所述第一帧标识,从第i个消息队列中读取具有所述第一帧标识的数据包,i为正整数,且i≤k;
响应于所述第i个消息队列读取完毕,开始从第i+1个消息队列中读取具有所述第一帧标识的数据包;
重复上述读取具有所述第一帧标识的数据包的两个步骤,直至所述k个消息队列中具有所述第一帧标识的数据包均读取完毕;
将所述当前消费的帧标识对应的数据包同步至至少一个关联客户端中。
2.根据权利要求1所述的方法,其特征在于,所述k个消息队列分别对应有各自的时长阈值;
所述方法还包括:
获取所述第i个消息队列对应的时长阈值,i正整数,且i≤k;
读取所述第i个消息队列中具有所述第一帧标识的数据包;
响应于所述第i个消息队列的读取时长超过所述时长阈值,开始从所述第i+1个消息队列中读取具有所述第一帧标识的数据包;
重复上述读取具有所述第一帧标识的数据包的三个步骤,直至所述k个消息队列中具有所述第一帧标识的数据包均读取完毕。
3.根据权利要求2所述的方法,其特征在于,所述时长阈值是通过所述消息队列对应的消费时长得到的,所述消费时长是从所述消息队列中读取一帧画面帧对应的数据包的预估时长。
4.根据权利要求1至3任一所述的方法,其特征在于,所述服务器存储有所述客户端控制的第一虚拟对象的第一位置坐标,所述与所述当前消费的帧标识对应的数据包包括第一类型数据包,所述第一类型数据包携带有所述画面帧中的第二虚拟对象的第二位置坐标;
所述方法还包括:
根据所述第一位置坐标对所述画面帧进行视野区域划分,得到m个视野区域,m为正整数;
响应于所述第二位置坐标不位于所述m个视野区域中的指定视野区域,在所述与所述当前消费的帧标识对应的数据包中滤除所述第一类型数据包。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
获取所述m个视野区域对应的视野列表,所述视野列表包括位于所述m个视野区域内的q个第二虚拟对象,q为预设的数量上限,q为正整数;
响应于所述第一类型数据包对应的第二虚拟对象不属于所述视野列表,在所述与所述当前消费的帧标识对应的数据包中滤除所述第一类型数据包。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
获取所述第一位置坐标和所述第二位置坐标之间的位置关系;
响应于所述位置关系满足预设条件,在所述与所述当前消费的帧标识对应的数据包中滤除所述第一类型数据包。
7.根据权利要求6所述的方法,其特征在于,所述预设条件包括如下条件中的至少一种:
所述第一虚拟对象与所述第二虚拟对象之间的距离大于距离阈值;
所述第二虚拟对象位于所述第一虚拟对象的视野外。
8.根据权利要求1至3任一所述的方法,其特征在于,所述与所述当前消费的帧标识对应的数据包包括第二类型数据包,所述第二类型数据包携带有虚拟对象的属性参数;
所述方法还包括:
响应于所述属性参数未发生改变,降低所述第二类型数据包的发送频率。
9.根据权利要求1至3任一所述的方法,其特征在于,所述将所述当前消费的帧标识对应的数据包同步至至少一个关联客户端中,包括:
将所述与所述当前消费的帧标识对应的数据包发送至发包线程中;
通过所述发包线程将所述数据包同步至所述至少一个关联客户端中。
10.根据权利要求1所述的方法,其特征在于,所述将所述数据包发送至与所述线程标识对应的逻辑线程进行逻辑运算后,将运算后的数据包写入至与所述逻辑线程对应的消息队列中,包括:
根据所述线程标识将所述数据包发送至所述k个逻辑线程中的第i个逻辑线程,i为正整数,且i≤k;
通过所述第i个逻辑线程对所述数据包进行逻辑运算,得到运算后的数据包;
将所述运算后的数据包写入与所述第i个逻辑线程对应的所述第i个消息队列中。
11.一种数据包的同步装置,其特征在于,所述装置包括:
接收模块,用于接收客户端发送的数据包,所述数据包携带有线程标识和帧标识,所述线程标识是所述客户端根据所述数据包需要的逻辑运算类型添加的,所述帧标识用于标识触发所述数据包时的画面帧;
写入模块,用于将所述数据包发送至与所述线程标识对应的逻辑线程进行逻辑运算后,将运算后的数据包写入至与所述逻辑线程对应的消息队列中;
读取模块,用于确定k个消息队列当前消费的帧标识,所述k个消息队列中插入第j帧画面的第一帧标识,k和j为正整数;响应于所述当前消费的帧标识是所述第一帧标识,从第i个消息队列中读取具有所述第一帧标识的数据包,i为正整数,且i≤k;响应于所述第i个消息队列读取完毕,开始从第i+1个消息队列中读取具有所述第一帧标识的数据包;重复上述读取具有所述第一帧标识的数据包的两个步骤,直至所述k个消息队列中具有所述第一帧标识的数据包均读取完毕;将所述当前消费的帧标识对应的数据包同步至至少一个关联客户端中。
12.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至10任一所述的数据包的同步方法。
13.一种计算机可读存储介质,其特征在于,所述可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至10任一所述的数据包的同步方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010760504.9A CN111737012B (zh) | 2020-07-31 | 2020-07-31 | 数据包的同步方法、装置、设备及存储介质 |
EP21851414.9A EP4095693B1 (en) | 2020-07-31 | 2021-06-17 | Data packet synchronization method and apparatus, device, and storage medium |
PCT/CN2021/100479 WO2022022140A1 (zh) | 2020-07-31 | 2021-06-17 | 数据包的同步方法、装置、设备及存储介质 |
US17/884,431 US20220379202A1 (en) | 2020-07-31 | 2022-08-09 | Data packet synchronization method and apparatus, device, and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010760504.9A CN111737012B (zh) | 2020-07-31 | 2020-07-31 | 数据包的同步方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111737012A CN111737012A (zh) | 2020-10-02 |
CN111737012B true CN111737012B (zh) | 2020-12-04 |
Family
ID=72656961
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010760504.9A Active CN111737012B (zh) | 2020-07-31 | 2020-07-31 | 数据包的同步方法、装置、设备及存储介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20220379202A1 (zh) |
EP (1) | EP4095693B1 (zh) |
CN (1) | CN111737012B (zh) |
WO (1) | WO2022022140A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111737012B (zh) * | 2020-07-31 | 2020-12-04 | 腾讯科技(深圳)有限公司 | 数据包的同步方法、装置、设备及存储介质 |
CN112433999B (zh) * | 2020-11-05 | 2023-12-22 | 北京浪潮数据技术有限公司 | 一种Janusgraph客户端遍历方法及相关组件 |
CN114630007B (zh) * | 2020-12-11 | 2024-04-26 | 华为技术有限公司 | 显示同步的方法、电子设备以及可读存储介质 |
CN113626221B (zh) * | 2021-08-10 | 2024-03-15 | 迈普通信技术股份有限公司 | 一种消息入队方法及装置 |
CN113722037B (zh) * | 2021-09-03 | 2023-08-11 | 北京百度网讯科技有限公司 | 一种用户界面的刷新方法、装置、电子设备及存储介质 |
CN114904265A (zh) * | 2022-04-20 | 2022-08-16 | 西安万像电子科技有限公司 | 数据处理方法、装置、存储介质及电子设备 |
CN115086714B (zh) * | 2022-06-13 | 2024-08-16 | 京东科技信息技术有限公司 | 数据处理方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106330769A (zh) * | 2016-11-15 | 2017-01-11 | 腾讯科技(深圳)有限公司 | 一种业务处理方法及服务器 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6134237A (en) * | 1997-09-30 | 2000-10-17 | Motorola, Inc. | Method and apparatus for tracking data packets in a packet data communication system |
US7244181B2 (en) * | 2000-11-14 | 2007-07-17 | Netamin Communication Corp. | Multi-player game employing dynamic re-sequencing |
US7133927B2 (en) * | 2002-04-29 | 2006-11-07 | Lucent Technologies Inc. | Method and apparatus for supporting real-time multi-user distributed applications |
US7584248B2 (en) * | 2004-02-27 | 2009-09-01 | Alcatel-Lucent Usa Inc. | Apparatus and method for fair message exchanges in distributed multi-player games |
US8284663B2 (en) * | 2005-10-14 | 2012-10-09 | Turbine, Inc. | Selectively ordered protocol for unreliable channels |
US8625422B1 (en) * | 2012-12-20 | 2014-01-07 | Unbound Networks | Parallel processing using multi-core processor |
CN104572290A (zh) * | 2013-10-11 | 2015-04-29 | 中兴通讯股份有限公司 | 消息处理线程的控制方法及装置 |
CN109697123B (zh) * | 2017-10-24 | 2023-03-14 | 腾讯科技(深圳)有限公司 | 游戏动画的渲染方法和装置、存储介质、电子装置 |
CN109271447B (zh) * | 2018-09-04 | 2024-07-30 | 中国平安人寿保险股份有限公司 | 数据同步方法、装置、计算机设备和存储介质 |
CN110162418B (zh) * | 2019-05-30 | 2023-06-27 | 努比亚技术有限公司 | 应用冷启动方法、移动终端及计算机可读存储介质 |
CN111013133A (zh) * | 2019-11-29 | 2020-04-17 | 北京奇艺世纪科技有限公司 | 数据处理方法及装置 |
CN111282263B (zh) * | 2020-03-03 | 2024-08-30 | 北京奇艺世纪科技有限公司 | 事件消息的处理方法、装置、电子设备及可读存储介质 |
CN111737012B (zh) * | 2020-07-31 | 2020-12-04 | 腾讯科技(深圳)有限公司 | 数据包的同步方法、装置、设备及存储介质 |
-
2020
- 2020-07-31 CN CN202010760504.9A patent/CN111737012B/zh active Active
-
2021
- 2021-06-17 WO PCT/CN2021/100479 patent/WO2022022140A1/zh unknown
- 2021-06-17 EP EP21851414.9A patent/EP4095693B1/en active Active
-
2022
- 2022-08-09 US US17/884,431 patent/US20220379202A1/en active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106330769A (zh) * | 2016-11-15 | 2017-01-11 | 腾讯科技(深圳)有限公司 | 一种业务处理方法及服务器 |
Also Published As
Publication number | Publication date |
---|---|
US20220379202A1 (en) | 2022-12-01 |
EP4095693A4 (en) | 2023-07-12 |
EP4095693B1 (en) | 2024-09-18 |
EP4095693A1 (en) | 2022-11-30 |
CN111737012A (zh) | 2020-10-02 |
WO2022022140A1 (zh) | 2022-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111737012B (zh) | 数据包的同步方法、装置、设备及存储介质 | |
CN110898428B (zh) | 多虚拟对象交互的方法、装置、服务器及存储介质 | |
US9647869B2 (en) | Method and system for hosting transient virtual worlds that can be created, hosted and terminated remotely and automatically | |
US8893049B2 (en) | Creation and prioritization of multiple virtual universe teleports in response to an event | |
WO2023279917A1 (zh) | 弹幕显示方法、弹幕发送方法、装置、计算机设备、计算机可读存储介质及计算机程序产品 | |
WO2014194695A1 (en) | Method and server for pvp team matching in computer games | |
US9415304B2 (en) | System and method for enabling user cooperation in an asynchronous virtual environment | |
WO2023142587A1 (zh) | 虚拟对象的控制方法、装置、设备、介质及程序产品 | |
CN110935169B (zh) | 虚拟对象的控制方法、信息显示方法、装置、设备及介质 | |
CN111228813B (zh) | 虚拟对象的控制方法、装置、设备及存储介质 | |
CN111330265B (zh) | 计算机系统、虚拟区的登录方法、装置、设备及介质 | |
CN110113414B (zh) | 一种管理副本的方法、装置、服务器及存储介质 | |
CN103678892A (zh) | 一种角色对象管理的方法和装置 | |
TW202237245A (zh) | 虛擬角色的選擇方法與裝置、電腦設備、電腦可讀存儲介質及電腦程式產品 | |
CN111432227B (zh) | 虚拟资源转移的风险确定方法、装置、服务器及存储介质 | |
US9977795B1 (en) | System and method for multiplayer network gaming | |
CN113713388A (zh) | 一种游戏数据处理方法、装置、设备及存储介质 | |
KR102647075B1 (ko) | 맵-리듀스를 사용하여 데이터 스큐를 해결하는 방법 | |
US9149725B2 (en) | Method and server for PVP team matching in computer games | |
CN112156475B (zh) | 一种业务数据处理方法、装置、电子设备及存储介质 | |
Lu et al. | The design of synchronization mechanisms for peer-to-peer massively multiplayer games | |
CN107617216B (zh) | 一种游戏人工智能任务的设计系统和方法 | |
Ferretti et al. | On distributing interactive storytelling: Issues of event synchronization and a solution | |
WO2024198669A1 (zh) | 基于虚拟世界的渲染方法、装置、设备和存储介质 | |
Chen | A Hybrid Architecture for Massively Scaled Distributed Virtual Environments |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40030734 Country of ref document: HK |