一种协同仿真方法、系统及服务器和客户端与流程

文档序号:18329429发布日期:2019-08-03 11:54阅读:270来源:国知局
一种协同仿真方法、系统及服务器和客户端与流程

本发明涉及计算机技术领域,特别涉及一种协同仿真方法、系统及服务器和客户端。



背景技术:

虚拟仿真技术是通过在计算机上运行仿真算法,以对仿真数学模型进行求解,进而将运算结果通过计算机图形设备展示给用户的综合性技术。基于虚拟仿真技术可以模拟生产实习环境,使得用户可以通过计算机在虚拟世界里学习和练习知识技能,方便本科、职业教育中实验教学工作的开展。

在利用虚拟仿真技术进行仿真时,可以采用单机和协同两种方式。在进行协同仿真时,要求仿真算法一致且同步运行,即需要保证各个客户端所获取到的仿真数据相同,且保证各个客户端所展示的仿真现象相同。目前在进行协同仿真时,各个客户端需要将修改变量发送给统一的服务器,服务器根据接收到的各个修改变量进行统一计算,然后将计算结果发送给各个客户端。

针对目前进行协同仿真的方法,服务器根据各个客户端发送的修改变量进行仿真算法的迭代运算,并将迭代运算后仿真算法修改的变量发送给各个客户端,而仿真算法所修改变量的数据量很大,从而服务器在将修改变量发送给各个客户端时需要占用较大的网络带宽,造成协同仿真对网络带宽的要求较高。



技术实现要素:

本发明实施例提供了一种协同仿真方法、系统及服务器和客户端,能够降低协同仿真对网络带宽的要求。

第一方面,本发明实施例提供了一种应用于服务器的协同仿真方法,包括:

a1:向客户端列表中记录的至少两个客户端分别发送开始计算指令,其中,所述开始计算指令用于指示所述客户端根据其本地存储的变量对仿真模型进行迭代运算;

a2:针对每一个所述客户端,如果在预设的第一等待时间内没有接收到来自该客户端的计算完毕消息,从所述客户端列表中将该客户端删除;

a3:针对所述客户端列表中记录的每一个所述客户端,向该客户端发送开始交互指令,其中,所述开始交互指令用于指示该客户端上传用户修改变量,所述用户修改变量由用户与该客户端交互而产生;

a4:针对所述客户端列表中记录的每一个所述客户端,如果在预设的第二等待时间内接收到该客户端上传的所述用户修改变量,将接收到的所述用户修改变量发送给所述客户端列表中记录的其他各个所述客户端,以使接收到所述用户修改变量的所述客户端根据所述用户修改变量对其本地所存储的变量进行同步。

可选地,在所述a4之后进一步包括:

确定请求重新接入协同仿真的重连客户端,并针对每一个所述重连客户端均执行:

a5:向所述重连客户端发送开始重连指令,其中,所述开始重连指令用于指示所述重连客户端上传其已完成迭代运算的第一迭代次数;

a6:如果在预设的第三等待时间内接收到来自所述重连客户端的所述第一迭代次数,确定所述第一迭代次数与第二迭代次数之间所接收到的所述用户修改变量的目标数据量,其中,所述第二迭代次数为所述客户端列表中记录的所述客户端已完成迭代运算的次数;

a7:判断所述目标数据量是否大于根据网络带宽而确定的数据量阈值,如果是,执行a8,否则执行a9;

a8:断开与所述重连客户端之间的连接,并结束当前流程;

a9:向所述重连客户端发送开始重连计算指令,并将所述第一迭代次数与所述第二迭代次数之间所接收到的所述用户修改变量发送给所述重连客户端,以使所述重连客户端根据接收到的所述用户修改变量进行迭代运算;

a10:如果在预设的第四等待时间内接收到来自所述重连客户端的重连计算结束信息,将所述重连客户端记录到所述客户端列表中,其中,所述重连计算结束信息用于指示所述重连客户端已根据接收到的所述用户修改变量完成迭代运算。

可选地,在所述a7之前进一步包括:

确定与各个所述客户端之间进行通信的网络带宽;

确定相对于当前时间过去的参考时间长度内单位时间数据接收量和单位时间数据发送量;

根据所述网络带宽、所述单位时间数据接收量和所述单位时间数据发送量,通过如下公式计算所述数据量阈值;

其中,所述m表征所述数据量阈值,所述p0表征所述网络带宽,所述t0表征所述参考时间长度,所述t表征过去时间t与当前时间之间的时间间隔,所述p1t表征对应于所述过去时间t的所述单位时间数据接收量,所述p2t表征对应于所述过去时间t的所述单位时间数据发送量。

第二方面,本发明实施例还提供了一种应用于客户端的协同仿真方法,包括:

b1:当接收到来自服务器的开始计算指令后,根据本地存储的变量对仿真模型进行迭代运算;

b2:在对所述仿真模型完成本次迭代运算后,向所述服务器发送计算完毕消息;

b3:当接收到来自所述服务器的开始交互指令后,如果与用户交互产生第一用户修改变量,将所述第一用户修改变量发送给所述服务器;

b4:当接收到来自所述服务器的第二用户修改变量时,根据所述第二用户修改变量对本地存储的变量进行同步,其中,所述第二用户修改变量由其他客户端发送给所述服务器。

可选地,该应用于客户端的协同仿真方法进一步包括:

当接收到来自所述服务器的开始重连指令后,向所述服务器发送已完成迭代运算的第一迭代次数;

如果接收到来自所述服务器的开始重连计算指令,接收来自所述服务器的同步参数,其中,所述同步参数包括所述服务器在所述第一迭代次数与第二迭代次数之间接收到的所有所述第二用户修改变量,所述第二迭代次数为所述服务器已完成迭代运算的次数;

根据所述同步参数对所述仿真模型进行迭代运算,使已完成迭代运算的次数达到所述第二迭代次数;

向所述服务器发送重连计算结束信息,以重新接入协同仿真。

第三方面,本发明实施例还提供了一种服务器,包括:第一交互单元、列表更新单元、第二交互单元和变量转发单元;

所述第一交互单元,用于向客户端列表中记录的至少两个客户端分别发送开始计算指令,其中,所述开始计算指令用于指示所述客户端根据其本地存储的变量对仿真模型进行迭代运算;

所述列表更新单元,用于针对每一个所述客户端,在所述第一交互单元向该客户端发送所述开始计算指令后,如果在预设的第一等待时间内没有接收到该客户端的计算完毕消息,从所述客户端列表中将该客户端删除;

所述第二交互单元,用于针对被记录在经所述列表更新单元更新之后的所述客户端列表中的每一个所述客户端,向该客户端发送开始交互指令,其中,所述开始交互指令用于指示该客户端上传用户修改变量,所述用户修改变量由用户与该客户端交互而产生;

所述变量转发单元,用于针对所述客户端列表中记录的每一个所述客户端,在所述第二交互单元向该客户端发送所述开始交互指令之后,如果在预设的第二等待时间内接收到该客户端上传的所述用户修改变量,将接收到的所述用户修改变量发送给所述客户端列表中记录的其他各个所述客户端,以使接收到所述用户修改变量的所述客户端根据所述用户修改变量对其本地所存储的变量进行同步。

可选地,该服务器进一步包括:重连控制单元;

所述重连控制单元,用于确定请求重新接入协同仿真的重连客户端,并针对每一个所述重连客户端均执行:

a5:向所述重连客户端发送开始重连指令,其中,所述开始重连指令用于指示所述重连客户端上传其已完成迭代运算的第一迭代次数;

a6:如果在预设的第三等待时间内接收到来自所述重连客户端的所述第一迭代次数,确定所述第一迭代次数与第二迭代次数之间所接收到的所述用户修改变量的目标数据量,其中,所述第二迭代次数为所述客户端列表中记录的所述客户端已完成迭代运算的次数;

a7:判断所述目标数据量是否大于根据网络带宽而确定的数据量阈值,如果是,执行a8,否则执行a9;

a8:断开与所述重连客户端之间的连接,并结束当前流程;

a9:向所述重连客户端发送开始重连计算指令,并将所述第一迭代次数与所述第二迭代次数之间所接收到的所述用户修改变量发送给所述重连客户端,以使所述重连客户端根据接收到的所述用户修改变量进行迭代运算;

a10:如果在预设的第四等待时间内接收到来自所述重连客户端的重连计算结束信息,将所述重连客户端记录到所述客户端列表中,其中,所述重连计算结束信息用于指示所述重连客户端已根据接收到的所述用户修改变量完成迭代运算。

可选地,

所述重连控制单元,进一步用于确定与各个所述客户端之间进行通信的网络带宽,并确定相对于当前时间过去的参考时间长度内单位时间数据接收量和单位时间数据发送量,以及根据所述网络带宽、所述单位时间数据接收量和所述单位时间数据发送量,通过如下公式计算所述数据量阈值;

其中,所述m表征所述数据量阈值,所述p0表征所述网络带宽,所述t0表征所述参考时间长度,所述t表征过去时间t与当前时间之间的时间间隔,所述p1t表征对应于所述过去时间t的所述单位时间数据接收量,所述p2t表征对应于所述过去时间t的所述单位时间数据发送量。

第四方面,本发明实施例还提供了一种客户端,包括:迭代运算单元、第三交互单元、第四交互单元和变量同步单元;

所述迭代运算单元,用于在接收到来自服务器的开始计算指令后,根据本地存储的变量对仿真模型进行迭代运算;

所述第三交互单元,用于在所述迭代运算单元对所述仿真模型完成本次迭代运算后,向所述服务器发送计算完毕消息;

所述第四交互单元,用于在所述第三交互单元发送所述计算完毕消息且接收到来自所述服务器的开始交互指令后,如果与用户交互产生第一用户修改变量,将所述第一用户修改变量发送给所述服务器;

所述变量同步单元,用于在所述第三交互单元发送所述计算完毕消息之后,当接收到来自所述服务器的第二用户修改变量时,根据所述第二用户修改变量对本地存储的变量进行同步,其中,所述第二用户修改变量由其他客户端发送给所述服务器。

第五方面,本发明实施例还提供了一种协同仿真系统,包括:第三方面提供的任意一种服务器和至少两个第四方面提供的任意一种客户端。

本发明实施例提供的协同仿真方法、系统及服务器和客户端,在每一个迭代运算的周期中,服务器首先向被记录在客户端列表中的各个客户端发送开始计算指令,以控制客户端根据其本地存储的变量对仿真模型进行迭代运算,如果客户端未能返回计算完毕消息,说明该客户端已断线,将该客户端从客户端列表中删除,之后服务器向客户端列表中记录的各个客户端发送开始交互指令,控制各个客户端上传与用户交互过程中产生的用户修改变量,之后服务器将分别将每一个客户端上传的用户修改变量转发给其他各个客户端,以供各个客户端对其本地存储的变量进行同步,保证各个客户端本地所存储变量的一致。由此可见,参与协同仿真的各个客户端在服务器的控制下按照一致的周期对仿真模型进行迭代运算,客户端将与用户交互过程中产生的用户修改变量发送给服务器,服务器将接收到的用户修改变量发送给其他各个客户端,使得每一个迭代运算周期各个客户端均能够根据相同的变量进行迭代运算,保证各个客户端仿真数据与所展示仿真现象的一致,而多客户端协同仿真过程中服务器仅需向各个客户端发送控制指令和用户修改变量,对仿真模型的迭代运算分别在各个客户端进行,服务器无需向客户端发送数据量较大的迭代运算结果,从而能够降低协同仿真对网络带宽的要求。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一个实施例提供的一种应用于服务器的协同仿真方法的流程图;

图2是本发明一个实施例提供的一种应用于服务器的客户端重连方法的流程图;

图3是本发明一个实施例提供的一种应用于客户端的协同仿真方法的流程图;

图4是本发明一个实施例提供的一种应用于客户端的客户端重连方法的流程图;

图5是本发明一个实施例提供的一种服务器所在设备的示意图;

图6是本发明一个实施例提供的一种服务器的示意图;

图7是本发明一个实施例提供的另一种服务器的示意图;

图8是本发明一个实施例提供的一种客户端所在设备的示意图;

图9是本发明一个实施例提供的一种客户端的示意图;

图10是本发明一个实施例提供的一种协同仿真系统的示意图;

图11是本发明一个实施例提供的一种协同仿真方法的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明实施例提供了一种应用于服务器的协同交互方法,该方法可以包括以下步骤:

步骤101:向客户端列表中记录的至少两个客户端分别发送开始计算指令,其中,开始计算指令用于指示客户端根据其本地存储的变量对仿真模型进行迭代运算;

步骤102:针对每一个客户端,如果在预设的第一等待时间内没有接收到来自该客户端的计算完毕消息,从客户端列表中将该客户端删除;

步骤103:针对客户端列表中记录的每一个客户端,向该客户端发送开始交互指令,其中,开始交互指令用于指示该客户端上传用户修改变量,用户修改变量由用户与该客户端交互而产生;

步骤104:针对客户端列表中记录的每一个客户端,如果在预设的第二等待时间内接收到该客户端上传的用户修改变量,将接收到的用户修改变量发送给客户端列表中记录的其他各个客户端,以使接收到用户修改变量的客户端根据用户修改变量对其本地所存储的变量进行同步。

本发明实施例提供的应用于服务器的协同交互方法,在每一个迭代运算的周期中,服务器首先向被记录在客户端列表中的各个客户端发送开始计算指令,以控制客户端根据其本地存储的变量对仿真模型进行迭代运算,如果客户端未能返回计算完毕消息,说明该客户端已断线,将该客户端从客户端列表中删除,之后服务器向客户端列表中记录的各个客户端发送开始交互指令,控制各个客户端上传与用户交互过程中产生的用户修改变量,之后服务器将分别将每一个客户端上传的用户修改变量转发给其他各个客户端,以供各个客户端对其本地存储的变量进行同步,保证各个客户端本地所存储变量的一致。由此可见,参与协同仿真的各个客户端在服务器的控制下按照一致的周期对仿真模型进行迭代运算,客户端将与用户交互过程中产生的用户修改变量发送给服务器,服务器将接收到的用户修改变量发送给其他各个客户端,使得每一个迭代运算周期各个客户端均能够根据相同的变量进行迭代运算,保证各个客户端仿真数据与所展示仿真现象的一致,而多客户端协同仿真过程中服务器仅需向各个客户端发送控制指令和用户修改变量,对仿真模型的迭代运算分别在各个客户端进行,服务器无需向客户端发送数据量较大的迭代运算结果,从而能够降低协同仿真对网络带宽的要求。

在本发明实施例中,多客户端协同仿真是通过不断迭代运算对微分方程求解的过程,当前迭代运算周期完成后进入下一迭代运算周期,本发明实施例提供的协同仿真方法是服务器针对一个迭代运算周期所进行的处理,各个迭代运算周期服务器采用相同的处理方式对参与协同仿真的各个客户端进行控制。

在本发明实施例中,服务器上存储有客户端列表,客户端列表中记录有上一个迭代运算周期处于在线状态的各个客户端,在当前迭代运算周期开始后,服务器首先向客户端列表中记录的各个客户端发送开始计算指令,之后检测是否所有客户端均返回了计算完毕消息。针对任意一个被记录在客户端列表中的客户端,如果服务器没有接收到该客户端所发送的计算完毕消息,服务器判定该客户端已断线,服务器断开与该客户端之间的连接并将该客户端从客户端列表中删除。

服务器根据计算完毕消息的接收情况判断客户端是否断线,当判定一个客户端断线后将该客户端剔除,不再向该客户端发送控制指令和用户修改变量,这不仅可以保证协同仿真不会因为单个客户端故障而停止运行,还可以避免向已断线客户端发送信息而造成的网络带宽浪费,从而保证网络带宽的有效利用率。

在本发明实施例中,服务器在向各个客户端发送开始计算指令后,会启动一个定时器,当该定时器的时间达到第一等待时间后,服务器开始对客户端列表进行更新,以将在第一等待时间内未返回计算完毕消息的客户端从客户端列表中删除。另外,服务器在向各个客户端发送开始交互指令后,也会启动一个定时器,该定时器的时间达到第二等待时间后,服务器停止接收客户端上传的用户修改变量,进入修改变量转发阶段。在服务器控制各个客户端进行协同仿真的过程中,服务器通过设定定时器保证各个客户端的迭代运算在固定时间内完成,保证各个客户端对仿真模型进行迭代运算的连续性。

可选地,在图1所示协同仿真方法的基础上,协同仿真过程中可能会有客户端出现断线的情况,为了保证客户端出现短暂断线后可以重新接入协同仿真,服务器在每个迭代运算周期可以启动断线重连程序。如图2所示,针对每一个请求重新接入协同仿真的重连客户端,服务器控制该重连客户端重新接入协同仿真的具体方法可以包括如下步骤:

步骤201:向重连客户端发送开始重连指令,其中,开始重连指令用于指示重连客户端上传其已完成迭代运算的第一迭代次数;

步骤202:判断在预设的第三等待时间内是否接收到来自重连客户端的第一迭代次数,如果是,执行步骤203,否则执行步骤205;

步骤203:确定第一迭代次数与第二迭代次数之间所接收到用户修改变量的目标数据量,其中,第二迭代次数为客户端列表中记录的客户端已完成迭代运算的次数;

步骤204:判断目标数据量是否大于根据网络带宽而确定的数据量阈值,如果是,执行步骤205,否则执行步骤206;

步骤205:断开与重连客户端之间的连接,并结束当前流程;

步骤206:向重连客户端发送开始重连计算指令,并将第一迭代次数与第二迭代次数之间所接收到的用户修改变量发送给重连客户端,以使重连客户端根据接收到的用户修改变量进行迭代运算;

步骤207:判断在预设的第四等待时间内是否接收来自重连客户端的重连计算结束信息,如果是,执行步骤208,否则执行步骤205;

步骤208:将重连客户端记录到客户端列表中。

在本发明实施例中,当一个客户端参与协同仿真过程中发生断线之后,该客户端可以申请重新接入协同仿真,当服务器接收到该客户端的申请后通过对该客户端进行一系列验证,如果该客户端满足符合各项要求则将该客户端记录到客户端列表中,之后该客户端便可以从下一迭代运算周期开始参与协同仿真,如果该客户端未满足各项要求则断开该客户端与服务器之间的连接。

首先,服务器向重连客户端发送开始计算指令,要求重连客户端上传其已完成迭代运算的第一迭代次数,之后服务器确定第一迭代次数与正常客户端已完成迭代运算的第二迭代次数之间服务器所接收到用户修改变量的目标数据量,如果目标数据量大于确定出的数据量阈值,则断开与重连客户端之间的连接,即不允许重连客户端重新接入协同仿真。

例如,重连客户端在断线之前对仿真模型进行了10次迭代运算,即第一迭代次数等于10,而当前客户端列表中所记录未断线客户端对仿真模型进行了15次迭代运算,即第二迭代次数等于15,则服务器确定从第11次迭代运算至第15次迭代运算过程中其所接收到用户修改变量的数据量,如果该数据量大于相对应的数据量阈值,则不允许该重连客户端重新接入协同仿真。

重连客户端在断线过程中其余客户端还会正常进行协同仿真,重连客户端处于断线的时间内正常进行协同仿真的各个客户端可能会向服务器发送用户修改变量,为了保证重连客户端重新接入协同仿真后能够与其他客户端具有相同的仿真数据和仿真现象,服务器需要将重连客户端断线期间所接收到的各个用户修改变量发送给该重连客户端。但是如果重连客户端断线期间服务器所接收到用户修改变量的数据量较大,服务器将重连客户端断线期间所接收到全部用户修改变量发送给重连客户端需要耗费较长时间,这不仅会占用较多的网络带宽,而且可能会影响其他客户端正常进行协同仿真,为此需要判断重连客户端断线期间服务器所接收到用户修改变量的数据量是否大于相应的数据量阈值,如果超过了数据量阈值则不允许重连客户端重新接入协同仿真,从而保证协同仿真能够正常进行。

其次,服务器在控制重连客户端重新接入协同仿真的过程中,通过设置第三等待时间和第四等待时间来控制重连在当前迭代运算周期内完成,在实现客户端断线重连的同时保证多客户端协同仿真过程的连续性,避免由于已断线客户端重新接入协同仿真影响正常客户端进行协同仿真,保证多客户端协同仿真的稳定性。

需要说明的是,本发明各个实施例中,为了保证用户进行协同仿真的效果,每个迭代运算周期可以对应较小的时间跨度,比如使迭代运算周期的时间跨度小于100毫秒,而第一等待时间、第二等待时间、第三等待时间和第四等待时间之和需要小于迭代运算周期的时间跨度,比如将第一等待时间、第二等待时间、第三等待时间和第四等待时间均设定为10毫秒。

可选地,在图2所示控制重连客户端重新接入协同仿真方法的基础上,在步骤204判断目标数据量是否大于数据量阈值之前需要确定数据量阈值,数据量阈值可以是预先设定的固定值,也可以是根据实时网络带宽占用情况而确定的动态值。

当数据量阈值为固定值时,可以预先在服务器上设置一个缓存区,该缓存区的大小等于数据量阈值,比如数据量阈值等于1m,服务器在接收到来自客户端的用户修改变量后,将所接收到的用户修改变量存储到缓存区中,当缓存区已被存满后则利用新接收到的用户修改变量覆盖最早接收到的用户修改变量。

当数据量阈值为根据实时网络带宽占用情况而确定的动态值时,具体可以通过如下方式来确定数据量阈值:

确定服务器与各个客户端之间进行通信的网络带宽;

确定相对于当前时间过去的参考时间长度内服务器的单位时间数据接收量和单位时间数据发送量;

将确定出的网络带宽、单位时间数据接收量和单位时间数据发送量代入如下公式,计算对应于当前迭代运算周期的数据量阈值;

其中,m表征数据量阈值,p0表征网络带宽,t0表征参考时间长度,t表征过去时间t与当前时间之间的时间间隔,p1t表征对应于过去时间t的单位时间数据接收量,p2t表征对应于过去时间t的单位时间数据发送量。

由于客户端不是每一个迭代运算周期都向服务器发送用户修改变量,同时服务器也不是每一个迭代运算周期都向客户端转发用户修改变量,因此服务器与各个客户端进行通信的网络带宽的占用情况是动态变化的,根据最近一段时间内服务器与客户端之间网络带宽的占用情况来预测此后网络带宽的占用,进而根据预测结果来确定数据量阈值,从而在网络带宽占用较低时确定出较大的数据量阈值,在网络带宽占用较高时确定出较小的数据量阈值,从而可以在保证协同仿真正常进行的前提下尽可能使重连客户端重新接入协同仿真,提升客户端断线后重新接入协同仿真的成功率,有助于提升用户进行协同仿真的满意度。

如图3所示,本发明一个实施例提供了一种应用于客户端的协同仿真方法,该方法可以包括以下步骤:

步骤301:当接收到来自服务器的开始计算指令后,根据本地存储的变量对仿真模型进行迭代运算;

步骤302:在对仿真模型完成本次迭代运算后,向服务器发送计算完毕消息;

步骤303:当接收到来自服务器的开始交互指令后,如果与用户交互产生第一用户修改变量,将第一用户修改变量发送给服务器;

步骤304:当接收到来自服务器的第二用户修改变量时,根据第二用户修改变量对本地存储的变量进行同步,其中,第二用户修改变量由其他客户端发送给服务器。

本发明实施例提供的应用于客户端的协同交互方法,当客户端接收到来自服务器的开始计算指令后,客户端根据其本地存储的变量对仿真模型进行迭代运算,并完成本次迭代运算后向服务器发送计算完毕消息,之后客户端在接收到来自服务器的开始交互指令后,如果在当前迭代运算周期中客户端与用户交互产生了第一用户修改变量,则将所产生的第一用户修改变量发送给服务器,之后如果接收到来自服务器的第二用户修改变量,则根据接收到的第二用户修改变量对其本地存储的变量进行同步。由此可见,多客户端协同交互过程中,对仿真模型的迭代运算在客户端完成,客户端在服务器的控制下与其他客户端同步进行迭代运算,客户端将与用户交互过程中产生的用户修改变量发送给服务器,同时接收服务器发送的由其他客户端发送给其的用户修改变量,从而保证不同客户端之间具有相同的仿真数据和仿真现象,由于客户端与服务器之间仅传输数据量较小的控制指令、反馈信息和用户修改变量,因此客户端与服务器之间仅需较小的网络带宽便可以满足多客户端协同仿真的数据传输要求,从而可以降低协同仿真对网络带宽的要求。

在本发明实施例中,多客户端协同仿真是通过各个客户端同步迭代运算对微分方程求解的过程,在协同仿真过程中一个迭代运算周期的结束即为下一个迭代运算周期的开始,本发明实施例所提供的协同仿真方法是客户端针对一个迭代运算周期所进行的处理,各个迭代运算周期中客户端采用相同的处理方式参与协同仿真过程。

在本发明实施例中,在当前迭代运算周期中,如果客户端与用户进行交互时用户对仿真模型的变量进行修改,则客户端会获取到用户修改后的用户修改变量,进而将获取到的用户修改变量发送给服务器,如果客户端没有与用户进行交互或与用户交互时用户没有对仿真模型的变量进行修改,则客户端在当前迭代运算周期不会向服务器发送用户修改变量。

在本发明实施例中,针对任意一个客户端,如果在当前迭代运算周期中服务器没有接收到其他客户端上传的用户修改变量,则在当前迭代运算周期该客户端不会接收到来自服务器的用户修改变量。

在本发明实施例中,如果客户端接收到来自服务器的用户修改变量,则客户端根据接收到的各个用户修改变量对其本地存储的变量进行更新,即本地存储的将与所接收到用户修改变量相对应的变量替换为接收到的用户修改变量。需要说明的是,在利用接收到的用户修改变量对本地存储的变量进行替换之前,客户端本地存储的变量为当前迭代运算周期对仿真模型进行迭代运算后的运算结果。

可选地,在图3所示协同仿真方法的基础上,如果客户端在参与协同仿真过程中发生断线,导致该客户端无法与服务器进行正常通信,在该客户端恢复与服务器之间的网络连接后,该客户端可以向服务器请求重新接入此前参与的协同仿真,之后根据服务器的控制尝试重新接入协同仿真。如图4所示,客户端重新接入协同仿真的具体方法可以包括如下步骤:

步骤401:当接收到来自服务器的开始重连指令后,向服务器发送已完成迭代运算的第一迭代次数;

步骤402:如果接收到来自服务器的开始重连计算指令,接收来自服务器的同步参数,其中,同步参数包括服务器在第一迭代次数与第二迭代次数之间接收到的所有第二用户修改变量,第二迭代次数为服务器已完成迭代运算的次数;

步骤403:根据同步参数对仿真模型进行迭代运算,使已完成迭代运算的次数达到第二迭代次数;

步骤404:向服务器发送重连计算结束信息,以重新接入协同仿真。

在本发明实施例中,当客户端接收到来自服务器的开始重连指令后,将其当前已完成迭代运算的第一迭代次数发送给服务器,服务器根据第一迭代次数确定需要向该客户端发送的用户修改变量的数据量是否大于相应的修改变量阈值,如果服务器的判断结果为否则服务器会向该客户端发送用户修改变量。客户端在接收到来自服务器的用户修改变量之后,客户端会根据接收到的用户修改变量依次进行一次或多次迭代运算,直至所完成迭代运算的次数与未断线客户端所完成迭代运算次数相等,之后该客户端便可以正常参与协同仿真。

可选地,在图3所示协同仿真方法的基础上,客户端在接收到来自服务器的开始计算指令后,客户端将在一段时间内停止与用户进行交互,以避免在对仿真模型进行迭代运算过程中用户修改仿真模型变量导致迭代运算出现错误,保证客户端进行协同仿真的可靠性。

可选地,在图3所示协同仿真方法的基础上,步骤302在对仿真模型完成本次迭代运算后,客户端可以将本次迭代运算的运算结果进行备份。这样,当客户端断线后请求重新接入协同仿真时,客户端接收到来自服务器的用户修改变量后可以从最近一次备份的运算结果开始迭代运算,从而可以缩短客户端根据所接收用户修改变量追赶迭代运算进度所需的时间,使得客户端可以尽快参与到协同仿真中,有助于提升用户的使用体验。

如图5、图6所示,本发明实施例提供了一种服务器。该服务器可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图5所示,为本发明实施例提供的服务器所在设备的一种硬件结构图,除了图5所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中服务器所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图6所示,作为一个逻辑意义上的装置,是通过其所在设备的cpu将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的服务器,包括:第一交互单元601、列表更新单元602、第二交互单元603和变量转发单元604;

第一交互单元601,用于向客户端列表中记录的至少两个客户端分别发送开始计算指令,其中,开始计算指令用于指示客户端根据其本地存储的变量对仿真模型进行迭代运算;

列表更新单元602,用于针对每一个客户端,在第一交互单元601向该客户端发送开始计算指令后,如果在预设的第一等待时间内没有接收到该客户端的计算完毕消息,从客户端列表中将该客户端删除;

第二交互单元603,用于针对被记录在经列表更新单元602更新之后的客户端列表中的每一个客户端,向该客户端发送开始交互指令,其中,开始交互指令用于指示该客户端上传用户修改变量,用户修改变量由用户与该客户端交互而产生;

变量转发单元604,用于针对客户端列表中记录的每一个客户端,在第二交互单元603向该客户端发送开始交互指令之后,如果在预设的第二等待时间内接收到该客户端上传的用户修改变量,将接收到的用户修改变量发送给客户端列表中记录的其他各个客户端,以使接收到用户修改变量的客户端根据用户修改变量对其本地所存储的变量进行同步。

可选地,在图6所示服务器的基础上,如图7所示,该服务器进一步包括:重连控制单元605;

重连控制单元605用于在变量转发单元604完成用户修改变量的转发后,确定请求重新接入协同仿真的重连客户端,并针对每一个重连客户端均执行:

a5:向重连客户端发送开始重连指令,其中,开始重连指令用于指示重连客户端上传其已完成迭代运算的第一迭代次数;

a6:如果在预设的第三等待时间内接收到来自重连客户端的第一迭代次数,确定第一迭代次数与第二迭代次数之间所接收到的用户修改变量的目标数据量,其中,第二迭代次数为客户端列表中记录的客户端已完成迭代运算的次数;

a7:判断目标数据量是否大于根据网络带宽而确定的数据量阈值,如果是,执行a8,否则执行a9;

a8:断开与重连客户端之间的连接,并结束当前流程;

a9:向重连客户端发送开始重连计算指令,并将第一迭代次数与第二迭代次数之间所接收到的用户修改变量发送给重连客户端,以使重连客户端根据接收到的用户修改变量进行迭代运算;

a10:如果在预设的第四等待时间内接收到来自重连客户端的重连计算结束信息,将重连客户端记录到客户端列表中,其中,重连计算结束信息用于指示重连客户端已根据接收到的用户修改变量完成迭代运算。

可选地,在图7所示服务器的基础上,

重连控制单元605进一步用于确定与各个客户端之间进行通信的网络带宽,并确定相对于当前时间过去的参考时间长度内单位时间数据接收量和单位时间数据发送量,以及根据网络带宽、单位时间数据接收量和单位时间数据发送量,通过如下公式计算数据量阈值;

其中,m表征数据量阈值,p0表征网络带宽,t0表征参考时间长度,t表征过去时间t与当前时间之间的时间间隔,p1t表征对应于过去时间t的单位时间数据接收量,p2t表征对应于过去时间t的单位时间数据发送量。

需要说明的是,上述服务器所包括各个单元之间的信息交互、执行过程等内容,由于与上述应用于服务器的协同仿真方法实施例基于同一构思,具体内容可参见上述应用于服务器的协同仿真方法实施例中的描述,此处不再赘述。

如图8、图9所示,本发明实施例提供了一种客户端。该客户端可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图8所示,为本发明实施例提供的客户端所在设备的一种硬件结构图,除了图8所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中客户端所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图9所示,作为一个逻辑意义上的装置,是通过其所在设备的cpu将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的客户端,包括:迭代运算单元901、第三交互单元902、第四交互单元903和变量同步单元904;

迭代运算单元901,用于在接收到来自服务器的开始计算指令后,根据本地存储的变量对仿真模型进行迭代运算;

第三交互单元902,用于在迭代运算单元901对仿真模型完成本次迭代运算后,向服务器发送计算完毕消息;

第四交互单元903,用于在第三交互单元902发送计算完毕消息且接收到来自服务器的开始交互指令后,如果与用户交互产生第一用户修改变量,将第一用户修改变量发送给服务器;

变量同步单元904,用于在第三交互单元902发送计算完毕消息之后,当接收到来自服务器的第二用户修改变量时,根据第二用户修改变量对本地存储的变量进行同步,其中,第二用户修改变量由其他客户端发送给服务器。

可选地,在图9所示客户端的基础上,该客户端进一步包括:重连执行单元;

重连执行单元用于在接收到来自所述服务器的开始重连指令后,向所述服务器发送已完成迭代运算的第一迭代次数,如果接收到来自所述服务器的开始重连计算指令,接收来自所述服务器的同步参数,其中,所述同步参数包括所述服务器在所述第一迭代次数与第二迭代次数之间接收到的所有所述第二用户修改变量,所述第二迭代次数为所述服务器已完成迭代运算的次数,根据所述同步参数对所述仿真模型进行迭代运算,使已完成迭代运算的次数达到所述第二迭代次数,向所述服务器发送重连计算结束信息,以重新接入协同仿真。

可选地,在图9所示客户端的基础上,迭代运算单元901在开始迭代运算之前,使客户端在一端时间内停止与用户进行交互,另外,迭代运算单元902在完成迭代运算之后,将迭代运算的结果存储在客户端本地进行备份。

需要说明的是,上述客户端所包括各个单元之间的信息交互、执行过程等内容,由于与上述应用于客户端的协同仿真方法实施例基于同一构思,具体内容可参见上述应用于客户端的协同仿真方法实施例中的描述,此处不再赘述。

如图10所示,本发明一个实施例提供了一种协同仿真系统,包括:上述任一实施例提供的服务器1001和至少两个上述任一实施例提供的客户端1002。

下面结合图10所示的协同仿真系统,以一个迭代运算周期中服务器与客户端所进行的交互为例,对本发明实施例提供的协同仿真方法作进一步详细说明,如图11所示,该方法可以包括如下步骤:

步骤1101:服务器向客户端列表中记录的至少两个客户端发送开始计算指令。

在本发明实施例中,在一个迭代运算周期开始后,服务器遍历客户端列表,向客户端列表中记录的每一个客户端发送开始计算指令。

例如,协同仿真a由10个客户端协同进行,10个客户端通过服务器a进行交互。在每一个迭代运算周期开始时,服务器a遍历客户端列表,分别向客户端列表中记录的每一个客户端发送开始计算指令。比如,在当前迭代运算周期开始时,客户端列表中记录有客户端1至客户端9,则服务器a分别向客户端1至客户端9共计9个客户端发送开始计算指令。

步骤1102:客户端根据开始计算指令对仿真模型进行迭代运算。

在本发明实施例中,针对参与协同仿真项目的每一个客户端,当接收到来自服务器的开始计算指令后,该客户端根据上一迭代运算周期结束后本地存储的变量对仿真模型进行迭代运算。

步骤1103:客户端在迭代运算完毕后向服务器发送计算完毕消息。

在本发明实施例中,针对每一个客户端,在该客户端完成迭代运算后,该客户端向服务器发送计算完毕消息。

步骤1104:服务器将在第一等待时间内没有返回计算完毕消息的客户端从客户端列表中移除。

在本发明实施例中,服务器在向各个客户端发送开始计算指令后,服务器启动一个定时器,之后服务器开始接收各个客户端返回的计算完毕消息,当定时器的时间达到第一等待时间后,服务器停止接收来自客户端的计算完毕消息,并将在第一等待时间内没有返回计算完毕消息的客户端从客户端列表中移除。

例如,预先设定的第一等待时间为10毫秒,服务器a在向客户端1至客户端9发送开始计算指令后,客户端1至客户端8均在10毫秒内返回了计算完毕消息,由于客户端9没有在第一等待时间内返回计算完毕消息,服务器a将客户端9从客户端列表中移除,此时客户端列表中还记录客户端1至客户端8共计8个客户端。

步骤1105:服务器向客户端列表中记录的每一个客户端发送开始交互指令。

在本发明实施例中,服务器在对客户端列表中所记录的客户端进行更新之后,服务器向被记录在客户端列表中的每一个客户端发送开始交互指令。

例如,服务器a分别向被记录在客户端列表中的客户端1至客户端8发送开始交互指令。

步骤1106:客户端将与用户交互所产生的用户修改变量发送给服务器。

在本发明实施例中,客户端在接收到来自服务器的开始交互指令后,客户端确定在当前迭代运算周期内用户是否对仿真模型的变量进行了修改,如果是则将用户对仿真模型的变量进行修改而产生的用户修改变量发送给服务器。

例如,在当前迭代运算周期内,客户端1的用户对客户端1上仿真模型的3个变量进行了修改,经用户修改后的3个变量为用户修改变量1至3,客户端2的用户对客户端2上仿真模型的2个变量进行了修改,经用户修改后的2个变量为用户修改变量4和用户修改变量5,其他客户端的用户均为对仿真模型的变量进行修改,则客户端1将用户修改变量1至3发送给服务器a,客户端2将用户修改变量4和用户修改变量5发送给服务器a。

步骤1107:服务器将接收到用户修改变量转发给其他客户端。

在本发明实施例中,当服务器接收到一个客户端所发送的用户修改变量后,服务器根据客户端列表中所记录的各个客户端,将所接收到的用户修改变量发给其他各个客户端。

例如,服务器a在接收来自客户端1的用户修改变量1至3后,将用户修改变量1至3发送给客户端2至客户端8。服务器a在接收到来自客户端2的用户修改变量4和用户修改变量5后,将用户修改变量4和用户修改变量5发送给客户端1以及客户端3至客户端8。

步骤1108:客户端根据接收到的用户修改变量对本地存储的变量进行同步。

在本发明实施例中,针对每一个客户端,当该客户端接收到来自服务器的用户修改变量后,该客户端根据接收到的用户修改变量对其本地所存储的变量进行同步。

例如,客户端2在接收到用户修改变量1至3后,利用用户修改变量1至3替换其本地所存储的相对应的变量;客户端1在接收到用户修改变量4和用户修改变量5后,利用用户修改变量4和用户修改变量5替换其本地所存储的相对应的变量;客户端3中接收到用户修改变量1至5后,利用用户修改变量1至5替换其本地所存储的相对应的变量。

步骤1109:服务器向请求重新接入协同仿真的重连客户端发送开始重连指令。

在本发明实施例中,在协同仿真过程中发生断线的客户端可以向服务器发送重新接入协同仿真的重连请求,将发送重连请求的客户端定义为重连客户端,服务器可以向各个重连客户端发送开始重连指令。

例如,客户端9断线后向服务器a发送重连请求,服务器a在接收到客户端9所发送的重连请求后向客户端9发送开始重连指令。

步骤1110:重连客户端根据开始重连指令向服务器发送已完成迭代的第一迭代次数。

在本发明实施例中,重连客户端在接收到来自服务器的开始重连指令后,重连客户端确定其对仿真模型已经完成迭代运算的第一迭代次数,并将确定出的第一迭代次数发送给服务器。

例如,客户端9在接收到开始重连指令后确定其已完成迭代运算的次数为10,即第一迭代次数为10,进而客户端9将第一迭代次数发送给服务器a。

步骤1111:服务器判断重连客户端是否满足重连条件,如果是,执行步骤1112,否则结束当前流程。

在本发明实施例中,服务器在接收到一个重连客户端所发送的第一迭代次数后,服务器确定正常客户端当前时间已完成迭代运算的第二迭代次数,之后确定在第一迭代次数与第二迭代次数之前服务器所接收到用户修改变量的数据量。如果确定出的数据量大于预先设定的数据量阈值,则判定该重连客户端不满足重连条件,相应地结束当前流程,之后在当前迭代运算周期结束后进入下一个迭代运算周期;如果确定出的数据量小于或等于预先设定的数据量阈值,则判定该重连客户端满足重连条件,相应地执行步骤1112。

例如,服务器a确定正常客户端当前时间已完成迭代运算的次数为20,则服务器a确定从第11次迭代运算至第20次迭代运算共计10次迭代运算过程中其所接收到用户修改变量的数据量,之后将确定出的数据量与预先设定的数据量阈值进行比较。比如,预先设定数据量阈值为1m,如果确定出的数据量大于1m则结束当前流程,如果确定出的数据量小于或等于1m则执行步骤1112。

步骤1112:服务器向重连客户端发送开始重连计算指令,并将第一迭代次数与第二迭代次数之间所接收到的所有用户修改变量发送给重连客户端。

在本发明实施例中,服务器在确定重连客户端满足重连条件后,向重连客户端发送开始重连计算指令,并将在第一迭代次数与第二迭代次数之间接收到的所有用户修改变量发送给重连客户端。

例如,在确定客户端9满足重连条件后,服务器a向客户端9发送开始重连计算指令,并将从第11次迭代运算至第20次迭代运算器件服务器a所接收到的所有用户修改变量发送给客户端9。

步骤1113:重连客户端根据开始重连计算指令进行迭代运算。

在本发明实施例中,重连客户端在接收到来自服务器的开始重连计算指令后,根据接收到的用户修改变量进行迭代运算。具体的,重连客户端从第一迭代次数开始进行迭代运算,直至迭代运算的次数达到第二迭代次数,针对期间所进行的每一次迭代运算,如果接收到的用户修改变量中包括有与该次迭代运算相对应的用户修改变量,则利用与该次迭代运算相对应的用户修改变量进行迭代运算,如果接收到的用户修改变量中不包括与该次迭代运算相对应的用户修改变量,则基于上一次迭代运算的结果进行本次迭代运算。

例如,客户端9根据接收到的用户修改变量,基于第10次迭代运算的结果开始迭代运算,经历第11次至第20次共计10次迭代运算后,完成重连计算。

步骤1114:重连客户端向服务器发送重连计算结束信息。

在本发明实施例中,重连客户端根据接收到的用户修改变量完成迭代运算后,此时重连客户端所完成迭代运算的次数与正常客户端所完成迭代次数相等,之后重连客户端向服务器发送重连计算结束信息。

例如,客户端9在完成第20次迭代运算后,向服务器a发送重连计算结束信息。

步骤1115:服务器将重连客户端记录到客户端列表中。

在本发明实施例中,服务器在接收到重连客户端所发送的重连计算结束信息后,服务器可以确定该重连客户端所进行的迭代运算已经与正常客户端所进行迭代运算同步,该重连客户端可以与其他客户端同步进行迭代运算,进而服务器将该重连客户端记录在客户端列表中,在下一个迭代运算周期该重连客户端将与其他客户端一起参与协同仿真。

例如,服务器a将客户端9记录到客户端列表中。

综上所述,本发明各个实施例提供的协同仿真方法、系统及服务器和客户端,至少具有如下有益效果:

1、在本发明实施例中,在每一个迭代运算的周期中,服务器首先向被记录在客户端列表中的各个客户端发送开始计算指令,以控制客户端根据其本地存储的变量对仿真模型进行迭代运算,如果客户端未能返回计算完毕消息,说明该客户端已断线,将该客户端从客户端列表中删除,之后服务器向客户端列表中记录的各个客户端发送开始交互指令,控制各个客户端上传与用户交互过程中产生的用户修改变量,之后服务器将分别将每一个客户端上传的用户修改变量转发给其他各个客户端,以供各个客户端对其本地存储的变量进行同步,保证各个客户端本地所存储变量的一致。由此可见,参与协同仿真的各个客户端在服务器的控制下按照一致的周期对仿真模型进行迭代运算,客户端将与用户交互过程中产生的用户修改变量发送给服务器,服务器将接收到的用户修改变量发送给其他各个客户端,使得每一个迭代运算周期各个客户端均能够根据相同的变量进行迭代运算,保证各个客户端仿真数据与所展示仿真现象的一致,而多客户端协同仿真过程中服务器仅需向各个客户端发送控制指令和用户修改变量,对仿真模型的迭代运算分别在各个客户端进行,服务器无需向客户端发送数据量较大的迭代运算结果,从而能够降低协同仿真对网络带宽的要求。

2、在本发明实施例中,服务器根据计算完毕消息的接收情况判断客户端是否断线,当判定一个客户端断线后将该客户端剔除,不再向该客户端发送控制指令和用户修改变量,这不仅可以保证协同仿真不会因为单个客户端故障而停止运行,还可以避免向已断线客户端发送信息而造成的网络带宽浪费,从而保证网络带宽的有效利用率。

3、在本发明实施例中,在服务器控制各个客户端进行协同仿真的过程中,服务器通过设定定时器保证各个客户端的迭代运算在固定时间内完成,保证各个客户端对仿真模型进行迭代运算的连续性。

4、在本发明实施例中,如果重连客户端断线期间服务器所接收到用户修改变量的数据量较大,服务器将重连客户端断线期间所接收到全部用户修改变量发送给重连客户端需要耗费较长时间,这不仅会占用较多的网络带宽,而且可能会影响其他客户端正常进行协同仿真,为此需要判断重连客户端断线期间服务器所接收到用户修改变量的数据量是否大于相应的数据量阈值,如果超过了数据量阈值则不允许重连客户端重新接入协同仿真,从而保证协同仿真能够正常进行。

5、在本发明实施例中,由于仿真算法在各个客户端分别进行,服务器仅运行对各个客户端进行控制的算法,单个服务器程序对硬件计算资源的消耗较小,从而单个硬件服务器可以运行多个服务器程序,从而可以降低实现协同仿真的成本。

需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质中。

最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1