一种基于远程过程调用的软总线通信方法与流程

文档序号:15931421发布日期:2018-11-14 01:41阅读:323来源:国知局

本发明涉及通信领域,具体是一种基于远程过程调用的软总线通信方法。

背景技术

随着计算机仿真技术的飞速发展,分布式全数字仿真技术日益完善,得到了广泛的应用。分布式全数字仿真技术可以应用于软件的需求方案阶段到集成验证阶段的整个过程,发现分布式嵌入式系统需求及设计中深层次的问题,多维度综合考察系统的安全性、可靠性及一致性。

在分布式全数字仿真测试系统中,软总线是关键的模块之一。其主要功能是实现全数字仿真节点模块间的数据通信及不同节点之间的协同仿真,确保整个测试过程的执行。软总线的架构及消息同步机制直接影响整个仿真测试系统的性能及最终的测试结果。目前,传统的分布式软总线架构主要通过增加功能和层数来满足不同的应用需求,在分布式嵌入式系统应用中存在一定的局限,如:增加部分功能会制约系统的整体性能及规模、系统架构复杂庞大、不支持同时等待多个topic消息等。



技术实现要素:

本发明的目的在于提供一种基于远程过程调用的软总线通信方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:

一种基于远程过程调用的软总线通信方法,具体步骤如下:

步骤一,远程调用软总线总体架构;

步骤二,建立actor模型机制;

步骤三,建立规则链表;

步骤四,连接仿真节点;

步骤五,启动actor生命周期。

作为本发明进一步的方案:软总线总体架构包括网络传输层、rpc层、actor层和服务层。

作为本发明进一步的方案:网络传输层负责将来自rpc层的数据包通过tcp通道发送至远程节点,同时监听底层tcp链接,收到数据后回调rpc层处理函数进行去复用分发处理;rpc层负责解决远程调用的问题,设计rpc统一解决调用方式、信息序列化、过程封装、客服端代理和服务端桩的实现的问题;actor层作为服务运行的容器,可有效提高程序实现的抽象性;服务层承载着全数字仿真测试平台的业务逻辑。

作为本发明进一步的方案:actor模型机制的基本元素是演员(actor)和消息(message),每个actor模型有一个消息队列(邮箱),消息队列由地址来标识,actor模型机制利用资源锁、调度信号灯及schedqueuenode链表很好的解决了多线程中安全、高效传输数据的问题,actor模型任务调度采用线程池的技术方法,实现了所有actor的协同工作,actor模型是独立的实体,通过消息交互改变对方状态及行为,包括4部分功能:模型初始化、消息管理、任务调度和接口服务,actor模型使用id和名称作为标识,通过双向列表的方式管理消息队列,每次从消息队列中弹出一条消息进行派发,根据rpc原子操作类型执行相应的动作,actor模型之间支持同步、异步消息通信,收到对端actor模型发送的rpc请求后执行指定的操作,每条rpc请求包括源节点、目的节点、消息大小和数据地址,当actor模型收到多个消息时,通过node指针将消息依次串联,形成消息队列,实现消息的集中式管理,当收到多个actor模型发送的消息时,将actor实体插入到schedqueuenode链表的头节点,操作完成后通过调度信号灯向调度器线程发出actor就绪的通知,actor模型中,消息是最基本的数据传送单位,采用结构体(struct)保存消息中的所有内容。

作为本发明进一步的方案:模型初始化负责绑定actor模型id和名称,初始化actor模型内部的状态;消息管理负责定义消息队列、调度队列节点及临时actor节点;任务调度负责消息的接收及转发处理;接口服务负责管理本地或远程服务对象,通过内部过程调用或rpc路由的方式实现服务查询、调用。

作为本发明进一步的方案:仿真节点的连接主要通过rpc软总线连接全数字仿真节点,连接建立过程如下:具有主节点功能的节点在启动参数指定的端口建立监听(tcp连接),具有从节点功能的节点在启动参数的指引下主动连接某主节点的指定端口,主节点收到连接请求完成连接后,等待从节点发送握手消息,从节点完成连接后,主动发送握手消息,并等待握手回复,主节点收到握手回复后,验证握手消息,将数据回调替换为routerforwardhandler,并回复握手回复,从节点收到握手回复后,验证握手回复,将数据回调替换为routerforwardhandler,此时网络对等的通信关系转换为actor对等的通信关系,通信关系表现为actor到actor的连接。

作为本发明进一步的方案:actor生命周期与仿真节点的管理紧密联系,仿真节点创建,启动actor并进行实例化,向主节点发布节点启动的响应,更新节点信息的路由表;仿真节点异常,停止actor,向主节点发布节点离线的通告,更新节点信息的路由表。

与现有技术相比,本发明的有益效果是:本发明的方法中软总线将基于消息派发的集中式总线结构重新划分,分布在不同组件之间,形成“网络化”的总线结构,灵活实现多设备、多总线类型、多总线协议的通讯机制,具有分布式通信、强实时性、actor-actor对等通信等特点,支持同步及异步通信方式,极大的提升了分布式网络的通信效率及性能。

附图说明

图1为基于远程过程调用的软总线通信方法中rpc软总线架构的设计框图。

图2为基于远程过程调用的软总线通信方法中rpc层的初始化流程图。

图3为基于远程过程调用的软总线通信方法中连接仿真节点的过程示意图。

图4为基于远程过程调用的软总线通信方法中actor模型的消息传递过程图。

图5为基于远程过程调用的软总线通信方法中actor模型的消息队列结构图。

图6为基于远程过程调用的软总线通信方法中rpc层的软总线总体流程图。

图7为基于远程过程调用的软总线通信方法中actor生命周期的状态转换图。

具体实施方式

下面结合具体实施方式对本专利的技术方案作进一步详细地说明。

请参阅图1-7,一种基于远程过程调用的软总线通信方法,具体步骤如下:

步骤一,远程调用软总线总体架构,软总线总体架构包括网络传输层、rpc层、actor层和服务层,网络传输层负责将来自rpc层的数据包通过tcp通道发送至远程节点,同时监听底层tcp链接,收到数据后回调rpc层处理函数进行去复用分发处理。网络传输层采用了高性能跨平台网络库libuv实现。libuv具有异步、非阻塞式io和消息驱动的特点,能有效的快速响应网络请求。此外,libuv还提供了平台无关定时器实现,可作为整个系统的定时器消息源;rpc层负责解决远程调用的问题。分布式的架构具有调用多样性的特点,因此,设计rpc统一解决调用方式、信息序列化、过程封装、客服端代理和服务端桩的实现等问题,为保障各全数字仿真节点的功能正常运行,该分布式全数字仿真系统中rpc层的各节点必须首先完成系统初始化,具体流程如下:系统启动后,程序加载rpc子系统、插件管理子系统,各模块分别处理其启动参数,rpc子系统主要设置其节点编号、监听端口,是否连接上层节点等功能,插件管理子系统设置其插件所在目录,需要加载哪些插件等,初始化rpc子系统,设置节点名,启动网络子线程,启动actor处理线程池,根据rpc启动参数产生routeactor。如果是主节点,则进行监听;如果是子节点,则连接到主节点,并发布当前节点,初始化插件子系统:加载命令行所要求的插件,并进行初始化,运行命令行所要求的插件,进行用户退出事件等待,初始化结束;actor层作为服务运行的容器,一方面,在整个消息层架构中是消息路由的一个中间环节,具有rpc寻址的作用。另一方面,每个actor运行在独立的线程中,具有相对独立的程序设计和运行环境,可有效提高程序实现的抽象性;服务层承载着测试平台的业务逻辑。在该测试平台中,主要包括两种服务组件:①部署服务。部署服务响应部署脚本的相关命令,完成节点创建、组件实例化、组件参数设置、组件连接等功能。②设备管理服务。设备管理服务响应组件实例化时的设备注册命令,响应测试平台运行时设备组件之间的寻址操作和消息收发操作;

步骤二,建立actor模型机制,actor模型的基本元素是演员(actor)和消息(message),其主要功能是处理消息,每个actor模型有一个消息队列(邮箱),消息队列由地址来标识。actor模型创建后,形成唯一的邮箱。每个actor模型由若干个变量和方法构成,变量实例化后构成其内部状态,其方法构成外部接口。actor模型是独立的实体,通过消息交互改变对方状态及行为,主要包括4部分功能:模型初始化、消息管理、任务调度、接口服务。当actor模型收到多个消息时,通过node指针将消息依次串联,形成消息队列,实现消息的集中式管理。当收到多个actor模型发送的消息时,将actor实体插入到schedqueuenode链表的头节点,操作过程中为防止死锁,增加了加锁、解锁的功能,操作完成后通过调度信号灯向调度器线程发出actor就绪的通知。这里利用资源锁、调度信号灯及schedqueuenode链表很好的解决了多线程中安全、高效传输数据的问题。actor结构体中主要定义了actor的状态及方法等内容。在创建actor时,首先绑定actor的id和名称,作为actor的标识。通过加锁、解锁操作,保证在同一个时刻最多只有一个线程在操作actor,防止多个线程同时访问同一个actor导致死锁的情况。该结构体中封装了actor任务的状态标识,防止消息队列为空的时候仍调度actor,提高了调度线程的执行效率。此外,还封装了actorhandler类,用于处理actor的原子操作,实现了actor的启动、终止、访问等功能。actor模型任务调度采用线程池的技术方法,实现了所有actor的协同工作。根据宿主机cpu的核数及仿真性能,线程的个数为4个,通过gschedthread全局数组实现线程池的管理功能。该技术预先创建一系列的空线程,在需要使用线程的时候,从线程池里,直接获取idle线程,省去了线程创建的过程,提高了程序执行的效率。线程池中的线程使用完毕后,能够被收回,供下次使用;当actor模型收到多个消息时,通过node指针将消息依次串联,形成消息队列,实现消息的集中式管理。当收到多个actor模型发送的消息时,将actor实体插入到schedqueuenode链表的头节点,操作完成后通过调度信号灯向调度器线程发出actor就绪的通知。actor模型中,消息是最基本的数据传送单位,采用结构体(struct)保存消息中的所有内容。消息的定义如下:

步骤三,建立规则链表,在分布式全数字仿真测试平台中,各个全数字仿真节点和rpc软总线通过tcp/ip网络连接。每个仿真节点以ip地址和关键字的哈希值形成映射,关键字为端口的m位二进制字符串(key)。仿真节点需要建立主题时,向rpc软总线注册,将(key,ip)发送给rpc软总线服务器,该服务器维护一张全数字仿真节点发布主题的规则链表,用于通信链路中数据的接收及转发。若全数字仿真节点n1创建后,向rpc服务器发布主题信息t;全数字仿真节点n2需要订阅主题t时,向rpc服务器发起查询请求后,仿真节点n2变为suspending态,直至收到主题信息后被激活,变为running态,同时收到主题t发布节点的ip信息,保存至本节点,完成主题信息的发布/订阅流程;

步骤四,连接仿真节点,通过rpc软总线连接全数字仿真节点,建立actor消息传递的“物理”通道,实现actor-actor对等的通信。首先创建主节点,完成后处于listen态,监听指定端口的消息。部署从节点,向主节点发起connect请求,主节点变成handshake态,等待对方发送握手信号。收到握手信号后,主节点状态为verify态,验证握手信号并更换数据向对方发送回复消息,完成节点间的rpc连接;

步骤五,启动actor生命周期,actor生命周期与仿真节点的管理紧密联系,在routeactor收到start命令后或软件自身有使用本地actor需要,产生相应的actor实例,在本地调用者上下文中,调用同步接口发布服务,该actor收到start事件后,在actor调度上下文中完成start事件回调,actor启动后,在actor调度上下文中完成业务逻辑处理;例如,从请求参数中获取服务id、方法id、方法参数。调用服务相应的回调函数;操作码为call时,将回调函数返回结果打包成rpc数据格式,回复给调用者,收到stop命令后,routeactor完成对该actor的停止操作,调用该actor的stop事件回调,并完成对其它actor的离线事件通知。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

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