一种多用户交通仿真平台系统的制作方法

文档序号:19992582发布日期:2020-02-22 02:26阅读:136来源:国知局
一种多用户交通仿真平台系统的制作方法

本发明涉及交通管理技术领域,尤其是一种多用户交通仿真平台系统。



背景技术:

交通仿真是城市智能交通的重要组成部分。交通仿真系统使用仿真技术来研究交通行为,对现有的交通系统的交通运行状况进行再现,并通过对系统展示的交通现象进行分析与解释,帮助用户掌握各类交通模型,产生的数据可以作为智能交通中车流量预测、疏导等一系列问题的数据来源。

但于此同时,目前网络上公开的仿真系统数量稀少,且明显存在一些缺憾之处:

1.由于网络服务器的计算能力的局限性,当前大多数的仿真系统、需要下载安装到用户计算机本地使用,但用户系统的五花八门使得对仿真系统的适配性要求较高,使用户的体验下降。

2.当前的大多数仿真系统主要借助于各类图表,如柱状图、饼图、热力图等实时展示交通仿真的过程或结果,这种方式无法使用户获得对交通状态,车辆状态的最直观的感受。

3.绝大多数仿真系统只支持单用户进行操作,这导致无法形成庞大的数据集合供给开发者和用户进行分析,同时无法保证交通仿真系统保持较高的使用效率。



技术实现要素:

本发明所要解决的技术问题是:针对现有技术的交通仿真系统仅支持单用户操作的问题,提供一种多用户交通仿真平台系统。

本发明采用的技术方案如下:

一种多用户交通仿真平台系统,其特征在于,包括:

前端显示模块;所述前端显示模块,用于交互以及展示仿真数据;

后端服务器系统;所述后端服务器系统包括用户和系统管理模块、仿真系统中台、仿真系统数据库和日志管理模块;所述仿真系统数据库用于存储系统数据;所述用户和系统管理模块用于管理系统数据;所述仿真系统中台包括若干仿真引擎管理模块,每个仿真引擎管理模块对应多个仿真引擎;所述日志管理模块包括用户日志管理模块、引擎日志管理模块和kafka消息中间件;所述用户日志管理模块用于日志记录用户操作事件;所述引擎日志管理模块用于日志记录仿真引擎自身产生的事件;

用户在使用时通过前端显示模块登录平台系统,由用户和系统管理模块认证用户身份后,所述仿真引擎管理模块为每个用户创建对应的仿真引擎,并通过kafka消息中间件为每个用户创建对应的消息部件来实现每个用户与对应的仿真引擎之间的仿真数据的收发。

进一步,所述前端显示模块包括用户界面和仿真界面;所述用户界面用于登录系统;所述仿真界面包括参数模块、控制模块和数据统计模块;所述参数模块用于设置仿真参数;所述控制模块用于完成仿真过程的控制操作;所述数据统计模块用于接收后端服务器系统回传的仿真数据,并对仿真数据进行实时渲染展示。

进一步,所述数据统计模块的实时渲染展示包括采用地图和车辆实时的运行坐标,以及实时统计数据。

进一步,所述实时统计数据至少包括平均行驶速度和实时拥堵指数。

进一步,所述实时统计数据采用两级页面展示,其中第一级页面展示主要统计数据,由用户自定义设置,第二级页面展示所有统计数据,根据用户的需要在第一级页面上操作跳转到第二级页面。

进一步,所述用户和系统管理模块包括:认证子模块、鉴权子模块、注册子模块和管理子模块;

所述认证子模块用于接收并验证用户登录信息;所述用户登录信息包括用户名和加密密码,以及两个安全验证随机数;所述认证子模块采用sha256哈希函数对数据库中查询的密码、以及接收到的安全验证随机数的组合进行加密,并对比加密结果与前端发送的加密密码是否一致;若一致则认证通过,并在认证通过后,创建token临时令牌,并保存用户的身份信息;

所述鉴权子模块用于将用户的角色和权限信息保存到token临时令牌并返回给前端显示模块,前端显示模块将token临时令牌保存至cookie或本地存储,之后每次前端显示模块请求资源均需携带token临时令牌,在验证token临时令牌,返回请求的数据;

注册子模块,用于创建新用户;

管理子模块,用于对产生的仿真数据、实验报告、上传的地图数据进行管理。

进一步,每个仿真引擎管理模块采用一个enginemanager子应用实现;每个enginemanager子应用存在于一台服务器上,用于管理一台服务器上的所有仿真引擎。

进一步,所述enginemanager子应用采用zookeeper分布式应用程序管理对应的仿真引擎。

进一步,所述后端服务器系统设置有缓冲区,通过在仿真事件建立后为每个仿真事件分配n个缓冲区,以此保存仿真引擎发送来的仿真数据。

综上所述,由于采用了上述技术方案,本发明的有益效果是:

本发明的一种多用户交通仿真平台通过为每个用户建立一个仿真引擎,并采用kafka消息中间件作为仿真引擎的快速数据传输通道,可以实现多用户操作。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明的多用户交通仿真平台系统的层次模型示意图。

图2为本发明的多用户交通仿真平台系统的系统架构图。

图3为本发明的多用户交通仿真平台系统的服务器部署图。

图4为本发明的多用户交通仿真平台系统的kafka消息中间件单用户处理流程示意图。

图5为本发明的多用户交通仿真平台系统的kafka消息中间件多用户处理流程示意图。

图6-7为本发明的多用户交通仿真平台系统的仿真引擎创建过程示意图。

图8为应用本发明的多用户交通仿真平台系统进行交通仿真的流程图。

图9为应用本发明的多用户交通仿真平台系统从用户发出请求到开始执行仿真实验的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

以下结合实施例对本发明的特征和性能作进一步的详细描述。

如图1-3所示,本发明的一种多用户交通仿真平台系统,包括:

前端显示模块;所述前端显示模块,用于交互以及展示仿真数据;

后端服务器系统;所述后端服务器系统包括用户和系统管理模块、仿真系统中台、仿真系统数据库和日志管理模块;所述仿真系统数据库用于存储系统数据;所述用户和系统管理模块用于管理系统数据;所述仿真系统中台包括若干仿真引擎管理模块,每个仿真引擎管理模块对应多个仿真引擎;所述日志管理模块包括用户日志管理模块、引擎日志管理模块和kafka消息中间件;所述用户日志管理模块用于日志记录用户操作事件;所述引擎日志管理模块用于日志记录仿真引擎自身产生的事件;

用户在使用时通过前端显示模块登录平台系统,由用户和系统管理模块认证用户身份后,所述仿真引擎管理模块为每个用户创建对应的仿真引擎,并通过kafka消息中间件为每个用户创建对应的消息部件来实现每个用户与对应的仿真引擎之间的仿真数据的收发。

本实施例的一种多用户交通仿真平台系统采用前后端分离开发,后端服务器为前端提供restful接口,数据格式采用jwt标准,前端显示模块获取数据后进行展示处理,使用h5中的canvas插件绘制地图和仿真信息。

在本实施例中,所述用户日志管理模块日志记录的用户操作事件包括用户注册、登录、管理等认证活动,以及仿真控制活动,如创建仿真、暂停仿真、停止仿真等;所述引擎日志管理模块日志记录的仿真引擎自身产生的事件,包括仿真生成、开始、停止等,引擎调度日志记录调度器对仿真实例的控制活动。

如图4-5所示,kafka消息中间件采用推送/订阅的模式,producer源源不断的将数据push到kafkabroker集群中,消息部件(consumer)以订阅的方式从kafkabrokers中读取数据。以单个仿真引擎为例,在每一个仿真步中,仿真引擎产生仿真数据,此时仿真引擎作为producer,创建topic并将仿真数据推送到kafka消息中间件,由kafka消息中间件创建消息部件(consumer)根据topic订阅仿真数据。由于在仿真过程中通过设置仿真步来避免脏数据的产生,因此仿真引擎会在当前设置的仿真步数完成后向kafka发送一个标志信息,用以表示设置的仿真步数内的仿真数据发送完毕。

仿真引擎的功能主要包括仿真控制、数据传输、仿真优化等。仿真控制包括进行仿真,即引擎接收到后台传入的参数后进行仿真,同时将仿真数据及其实时的统计发送到后台,仿真步数达到设置的值时停止仿真。

本发明的一种多用户交通仿真平台通过为每个用户建立一个仿真引擎,并采用kafka消息中间件作为仿真引擎的快速数据传输通道,可以实现多用户操作。

其中,所述前端显示模块包括用户界面和仿真界面;所述用户界面用于登录系统;所述仿真界面包括参数模块、控制模块和数据统计模块;

所述参数模块用于设置仿真参数,主要是通过引导用户对众多交通仿真设计到的参数进行一系列设置,对用户输入的仿真参数的合法性进行校验,以及将用户的仿真参数提交到后台进行仿真,其中主要的仿真参数要包括路网选择、车辆生成方案(均匀分布/指数分布/伽马分布/正态分布)、信号灯控制方案、跟驰模型选择(基于安全距离的车辆跟驰模型/智能驾驶员模型)、换道模型选择(匀加速换道模型、加速度自适应换道模型)等;

所述控制模块用于完成仿真过程的控制操作;主要针对仿真过程中一系列的控制操作,在用户的输入参数均符合要求时,提供包括仿真开始、暂停、结束、结果展示等操作;

所述数据统计模块用于接收后端服务器系统回传的仿真数据,并对仿真数据进行实时渲染展示。所述数据统计模块的实时渲染展示包括采用地图和车辆实时的运行坐标,以及实时统计数据。其中为了方便查看,一般可以在页面中部绘制地图和车辆实时的运行坐标的演示,页面右端的实时统计数据,如当前平均行驶速度、实时拥堵指数等。作为优选,所述实时统计数据采用两级页面展示,其中第一级页面展示主要统计数据,由用户自定义设置,第二级页面展示所有统计数据,根据用户的需要在第一级页面上操作跳转到第二级页面。

所述用户和系统管理模块包括:认证子模块、鉴权子模块、注册子模块和管理子模块;

所述认证子模块用于接收并验证用户登录信息;所述用户登录信息包括用户名和加密密码,以及两个安全验证随机数;所述认证子模块采用sha256哈希函数对数据库中查询的密码、以及接收到的安全验证随机数的组合进行加密,并对比加密结果与前端发送的加密密码是否一致;若一致则认证通过,并在认证通过后,创建token临时令牌,并保存用户的身份信息;

所述鉴权子模块用于将用户的角色和权限信息保存到token临时令牌并返回给前端显示模块,前端显示模块将token临时令牌保存至cookie或本地存储,之后每次前端显示模块请求资源均需携带token临时令牌,在验证token临时令牌,返回请求的数据;

注册子模块,用于创建新用户;

管理子模块,用于对产生的仿真数据、实验报告、上传的地图数据进行管理。

进一步,每个仿真引擎管理模块采用一个enginemanager子应用实现;每个enginemanager子应用存在于一台服务器上,用于管理一台服务器上的所有仿真引擎。其中,所述enginemanager子应用采用zookeeper分布式应用程序管理对应的仿真引擎。如图6所示,enginemanager子应用在启动时,会将自身的ip、端口、serviceid等信息写入zookeeper分布式应用程序,并保持长链接,当长链接断开,enginemanager子应用不再可用,此时zookeeper分布式应用程序会删除其写入的节点信息,以保证后台通过远程过程调用的服务是可用的。

仿真计算对系统的资源需求较大,为防止创建失败引起资源浪费,在创建仿真引擎之前需要创建者对创建目的地的计算资源进行感知,以确定是否可以创建新的仿真引擎。这可以使用java核心包和sigar通过调用操作系统的api来实现。程序对内存的探测主要是通过java虚拟机来实现。

仿真引擎的创建主要发生在两个时段,系统初始化阶段和运行时阶段。

在初始化阶段,在enginemanager子应用启动完成并成功向zookeeper分布式应用程序注册信息之后,会默认的启动一定数量的仿真引擎,目的是当少量用户请求到来时,可以立即进行仿真实验。默认启动仿真引擎的数量由用户在配置文件中指定,否则不启动默认仿真引擎。

在运行时阶段,当有新用户请求到来时,enginemanager子应用将会创建新的仿真引擎来处理用户请求。如图7所示,仿真引擎创建需要耗费一定时间,使用多线程同时创建多个仿真引擎,以减少用户最大等待时间。系统维护用户请求与仿真引擎的映射关系,当仿真引擎成功创建之后,会将对应的用户请求转发给仿真引擎。

进一步,所述后端服务器系统设置有缓冲区,通过在仿真事件建立后为每个仿真事件分配n个缓冲区,以此保存仿真引擎发送来的仿真数据。

缓冲区会不断判断是否有空闲的缓冲区,如果有,则向仿真引擎发送一条操作,提示仿真引擎进行多步仿真。此时缓冲区读取操作暂停,同时与仿真相对应的两个listener会开始接收消息。listener会向第一个空闲缓冲区发送消息,缓冲区会保存。当引起进行完成一步仿真之后,引擎会发送来一条finish消息,提示服务器一次仿真暂停。当listener收到该条finish消息后,空闲判断会继续。注意,一共有两条finish消息,必须收到两条finish消息后才会继续。

缓冲区会不断判断是否有写满的缓冲区,该循环会被网页暂停。如果有,则将该缓冲区拆分成多条数据,进行接下来的处理。在拆分得到一步仿真数据后对数据进行转发处理,发送完成后判断是否被暂停。如果没有则等待写满的缓冲区。此时进入缓冲状态中。进入缓冲状态说明服务器性能跟不上前端,所以该系统需要功能强大的引擎端和服务器内网,以及性能强大的消息中间件。

如图8所示,应用本发明的一种多用户交通仿真平台系统的交通仿真流程,包括如下过程:

(1)启动仿真:

开始仿真请求会使用空闲状态仿真引擎或出发新仿真引擎的创建,从用户通过前端显示模块发出请求到后端服务器系统开始执行仿真实验的过程如图9所示。

用户通过前端显示模块向后台发送一个开始仿真指令,后端服务器系统接收到指令之后,创建一个封装了仿真id、用户id、用户仿真参数的类,将该类放入请求队列,然后向前端显示模块返回成功请求标识和仿真id。后端服务器系统使用一个线程池对请求队列中的数据进行转发,根据后端轮训的负载均衡策略,将仿真任务委托给enginemanager子应用。

(2)进行仿真:

仿真引擎按照给定仿真步进行运算,完成仿真步数之后会转入就绪状态,等待用户输入新的仿真步数。系统假定用户对仿真步数没有具体要求,用户在发出结束仿真指令之前会一直进行仿真。系统每次向仿真引擎传入100步数,当仿真引擎转入就绪态后会立即输入新的100步。

(3)结束仿真:

用户通过前端显示模块发出结束指令之后,后端服务器系统将指令转发给仿真引擎,仿真引擎在完成当前步的计算后,转入就绪态。enginemanager子应用根据当前用户请求数,将该仿真引擎销毁或移入空闲仿真引擎列表。

(4)销毁:

仿真引擎的销毁方式是结束进程。对于每一个enginemanager子应用,当前用户请求数量为空,并且空闲仿真引擎队列不为空时,会销毁部分空闲队列中的仿真引擎,直到空闲仿真引擎数量加上使用中仿真引擎数量等于默认仿真引擎数量。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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