一种基于Iron/Rust的船舶电力模拟训练系统RESTFUL服务方法

2019-01-08 01:56,,,
船海工程 2018年6期
关键词:序列化模拟训练客户端

,,,

(1.海军驻大连426厂军代表室,辽宁 大连 116001;2.中国舰船研究设计中心,武汉 430064;3.海军工程大学 电气工程学院,武汉 430033)

随着电力监控系统在船舶中的引入,亟须建立船舶电力虚拟模拟训练系统,对船员进行相应的培训辅导,使其尽快掌握必要的基础知识和实际的操作技能[1-5]。在大型船舶中,电力监控系统也需要进行多战位设置,实现对系统的梯队化管理,需要模拟训练系统提供多战位协同训练功能。在多人协同交互的模拟训练场景中,为保证各训练部位信息显示的一致性,信息的实时交互至关重要。受训人员需要在训练客户端上,通过虚拟场景进行各种模拟操作,如机组的启动、合闸、并车、解列、停机等,需要与实时或非实时服务器等进行数据交互。虚拟模拟训练系统不仅需要模拟与实船相同的电力系统,提供电力系统实时仿真服务,在需要时能够实时地对受训人员的操作进行提示和反馈,而且需要提供仿真电力系统关键数据、施训人员和受训人员信息、受训人员训练时间、地点以及训练效果和考核结果等信息的存储管理。以上数据的交互均需要考虑实时性。研究分布式虚拟模拟训练系统通信的实时性技术,即研究虚拟模拟训练的实时数据分发方法,对于构建一个可用性强的模拟训练系统十分必要。基于以上需求,提出一种基于Iron/Rust的船舶电力模拟训练系统RESTFUL服务方法,满足船舶电力虚拟模拟训练系统对指令处理的实时性需求。

1 基于Serde库的序列化

由于在电力模拟训练系统仿真服务器中,需要完成对船舶电力系统中包括发电机组、断路器等各种设备在内的虚拟呈现,将整个系统虚拟化,在进行模拟仿真时,虚拟化的设备需要以类的形式进行运行产生数据。用户在通过客户端进行模拟训练时,训练人员的操作指令按照规定的通信协议通过舰载平台网打包发送至系统服务器,服务器根据收到的操作指令结合设定的训练程序生成反馈数据。该数据需要按照相同的通讯协议通过平台网发送至训练客户端,更新训练客户端的训练界面,在多战位的协同训练过程中,可以保持各训练部位训练进程的一致性,维持训练的协调持续进行。服务器同时要将收到的客户端操作指令进行记录分类归档,用于后期的训练查询及考核评估。在发送端对需要发送的数据按照存储或通讯协议的要求进行编排,在接收端按照已定的解析协议对收到的数据进行信息解析,即序列化和反序列化的过程。基于RSETful的数据交换时,序列化和反序列化是系统必须要解决的问题。

序列化操作可以让其他程序模块访问未进行序列化便无法修改或查看的对象数据。在对象数据进行相应序列化后,系统在需要查看或修改这些数据时,不需要考虑对象成员的可访问性,相应地,数据的反序列化将接收到的已序列化的数据中解析出需要的数据,用于更新对象状态。

Serde是Rust中应用最为广泛的序列化和反序列化框架,主要用于将序列化后的数据按照Rust结构进行转换,反之亦然。在研究准备构建的训练模拟训练系统中,主要基于Rust结构与JSON数据的转化。

2 基于RESTFUL的数据分发方法

REST(Representational State Transfer)是一种充分利用Web特性的分布式软件架构风格,可以降低系统开发的复杂性,提供系统的可伸缩性。利用统一资源标识符(URI)来定位和识别资源,并通过HTTP协议中的方法(PUT、GET、POST、DELETE)在资源进行CRUD操作。

基于Rust语言的Iron框架建立船舶模拟训练系统的RESTFUL数据,需要建立基本的REST API路由:

mount_root.mount("/api/v1/", mount_api);

mount_root.mount("/client/", Static::new(Path::new("./client")));

在船舶电力模拟训练中,资源信息主要分为四类:用户信息、训练操作信息、训练过程信息以及战位信息。各类信息包括全部显示、创建、查找、更新和删除五类子信息。在REST服务架构中,URI应该包含所有作用域信息,其设计有三条基本原则:用路径变量来表示层次结构;在路径变量里加上标点符号,以消除误解;用查询变量来表达算法的输入[6-7]。

文中利用对各种资源确定URI。对四类资源信息确定URI部分路径,其拓扑关系见图1。

图1 模拟训练资源信息的拓扑示意

以用户信息为例,确定其子信息的路径与对应的HTTP操作,其他各类信息可同理确定其URI。见表1。

其拓扑关系图见图2。

表1 模拟训练资源子信息的URI部分路径及HTTP操作

图2 模拟训练资源子信息示意

3 RESTFUL服务负载测试与分析

为对设计的RESTFUL服务架构性能进行比较与分析,必须通过定量化、通用的一些性能测试工具与方法,对上述方法进行测试,并对结果进行比较与分析。负载测试是为检验系统在给定负载下能否达到预期性能指标。文中将主要采用siege工具进行负载测试。

利用siege工具,分别模拟10个客户端并行、100个客户端并行访问相应典型数据,对restful数据分发方法进行5次测试,得到相应的测试结果,见图3、4。

图3 仿真电力系统数据测试结果

图4 指令数据测试结果

由图3、4可知,随着并行客户端访问量的增加,传输的平均总数据也相应增加;由于并行客户端访问量增加,服务器的响应时间也相应增大。由于仿真电力系统数据帧较长,在单次获取仿真电力系统数据帧时,总的通信数据量为0.41 MB。服务器获取仿真电力系统数据帧的响应时间,由10客户端的≤30 ms,增大至100客户端所对应的≤250 ms 。由于在所有实时分发数据中,仿真电力系统数据帧属于最长的数据帧,其大小为84.59 k,而指令数据帧均比较短,大小在1 k以内。仿真电力系统数据帧为周期数据,模拟训练服务器每100 ms更新一次,网页客户端每600 ms请求一次仿真电力系统数据帧。指令数据帧为间歇性随机数据,由客户端根据用户的操作而随机发送。通过测试可知,对于实际情况中最常用的1~10个并行客户端场景,其通信延迟时间≤1 ms,对于极限情况下的100个并行客户端场景,其通信延迟时间≤10 ms。实时数据分发性能完全满足船舶电力模拟训练系统实际应用的需求。

4 结论

提出一种基于Iron/Rust的船舶电力模拟训练系统RESTFUL服务方法。对模拟训练所需的各种数据资源确定URI;构建各个数据资源的子信息的路径与对应的HTTP操作,即CRUD;对上述RESTFUL服务方法进行负载测试。结果表明,该方法能满足船舶电力模拟训练系统实际应用需求。

猜你喜欢
序列化模拟训练客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
射电望远镜控制系统中的数据传输序列化分析*
模拟训练(二)
初中生写作序列化实践与思考
模拟训练(十一)
模拟训练(十)
分层次序列化训练增强考场写作的增分因素
对“失序”的习作教学之思考和把脉
媒体客户端的发展策略与推广模式