CN102523225A - 分布式松耦合构架中的解耦方法及分布式松耦合构架平台 - Google Patents
分布式松耦合构架中的解耦方法及分布式松耦合构架平台 Download PDFInfo
- Publication number
- CN102523225A CN102523225A CN2011104338507A CN201110433850A CN102523225A CN 102523225 A CN102523225 A CN 102523225A CN 2011104338507 A CN2011104338507 A CN 2011104338507A CN 201110433850 A CN201110433850 A CN 201110433850A CN 102523225 A CN102523225 A CN 102523225A
- Authority
- CN
- China
- Prior art keywords
- node
- message
- data
- main service
- module
- 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.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种分布式松耦合构架中的解耦方法,发明采用通用的消息机制与发布、订阅者模式(又称观察者模式)实现模块之间的通信。或者,采用客户端和服务端的模块来实现模块之间的通信。在本发明中,各个模块(即把构架解耦成若干个独立的应用程序,每一应用程序作为一节点),节点使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信。各个应用程序之间的数据交互,通过主服务知道节点中哪些数据需要交互,而且节点只需要将需要交互的数据彼此进行通信即可,即只关注其的输入(订阅的消息)和输出(发布的消息),而不去关心消息输入的具体实现方法,做到真正意义上的解耦。
Description
技术领域
本发明涉及控制领域,尤其涉及一种实现基于Protobuf和TCP/IP的一种分布式松耦合构架中的解耦方法及分布式松耦合构架平台。
背景技术
机器人领域有一个非常现实的问题,有非常多不同类型不同型号的传感器,同时也有非常多不同算法,不同的算法需要组合不同的传感器,这就需要软件工程师在设计应用程序构架的时候把其设计成为分布式松耦合的构架。即,将软件的各个部分划分为多个相对独立的模块,做到真正意义上的解耦。这里应该指出的是“耦合与解耦”是“设计模式Design Patterns”与“软件架构设计”这两个领域的最核心词汇。其中“耦合”指的是“一个模块的实现依赖于另一个模块的实现”。
然而,耦合度高的框架给后续程序造成的最大影响在于代码复用困难。对于耦合度高的代码来说,代码复用需要经历“解耦与提炼”、“代码复制”、“代码重封装”三个步骤。由于这种“解耦与提炼”对于技术积累并没有任何贡献,因此可归为某种“不增值活动”,而如何避免“不增值活动”则是提高效率的关键。解决这种复用困难的根本途径在于在开发过程中,模块之间的解耦,解耦后的模块可以直接被复用并不经修改组装到所有需要用到该模块的项目中,节省大量时间与人力资源。
代码的过度耦合将导致调试过程中,对问题的“分割与定位”的难度增加。相对于模块分明,解耦彻底的代码而言,一份杂糅且耦合的代码,对问题的分割与定位往往需要更多的时间代价。而在对问题定位以后,修正BUG的过程中又需要牵涉到其余模块的代码以及开发人员。所以对于一个机器人***来说,做到代码上得解耦是非常有必要的。
然而,模块之间的解耦并不是意味着模块之间就完全没有联系了。模块之间比然还是有一部分数据是需要交互的,但是直接的通信势必又会造成模块之间的耦合。模块之间必然还是有一部分数据是需要交互的,但是直接的通信势必又会造成模块之间的耦合。
因此,在现有技术中,如何实现分布式松耦合构架中的解耦方法,以解决现有解耦带来性能上很大开销的问题,是现今一大技术难题。
还有,现有的运行操作***也多种多样,有linux系列,有windows系列,有嵌入式系列的,也有移动终端平台系列的,包括IOS和Android等,能够支持尽量多得操作***具有很大的意义,而现有技术中很难实现这一点。
发明内容
本发明的第一目的在于提供一种分布式松耦合构架中的解耦方法,以解决现有技术中解耦带来性能上很大开销的技术问题。
本发明的第二目的在于提供一种分布式松耦合构架平台,,以解决现有技术中解耦带来性能上很大开销的技术问题。
一种分布式松耦合构架中的解耦方法,包括以下步骤:
(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;
(2)在运行之前,节点先完成对主服务Core的注册,节点从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,其中发布消息为本节点能够提供的包括运行结果数据在内的数据信息,所述订阅消息为本节点需要的数据信息;
(3)运行后,节点把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收方节点接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
步骤(2)具体包括:在注册时,节点将本节点需要订阅消息、本节点包括端口信息在内的地址连接信息预先在主服务Core进行登记;在节点要预发布任何类型消息之前,节点先从主服务Core获得订阅此消息节点的所有信息。
接收方节点接收到对应消息的处理过程为:从本节点所在终端的网络实现层接收到打包的数据,然后经网络抽象层调用后,再经过反串行化,后把打包的数据解析成程序理解的数据然后上送到远程调用逻辑层;远程调用逻辑层根据数据内容校验,然后去调用相应绑定的回调函数,并且把回调函数返回的结果串行化后,通过网络抽象层的调用后通过网络实现层发送出去。
还设置log记录***,其log记录***使用统一的分级接口,设置可打印和/或网络传送;所有日志发送给主服务,主服务会把具体的日志整合后发送给控制台程序或者任意希望接收日志的节点。
任意节点发布的任意类型消息,用一个消息记录软件记录安装时间顺序记录成文件保存下来,并且使用消息回放软件安装时间顺序,把记录的消息回放出去。
节点是通过设置RPC模块来进行数据的序列化和反序列化、数据的分包和组包过程、对外提供统一的RPC调用接口、和RPC服务开启接口;RPC过程为首先把需要发送的数据序列化,分包,然后再发送,当接收数据后组包,反序列化数据,然后从线程池中调用一个空闲线程去执行处理函数,最后把处理结果安装发送的方式回传给发送节点的RPC调用方法。
并且,每个节点设置一个线程池来进行节点所需线程的调度工作,以最大限度地减小线程调度的代价。
主服务Core是全局唯一的,且主服务的ip地址和端口是从环境变量中获取的,包括线程池个数,缓存区大小,网络超时时间,网络协议类型在内的配置由编译时确定,在运行的过程中每个节点都需要知道主服务的IP地址以及端口号,此信息通过当前运行PC中的环境变量SURO_MASTER_URI中获取。
一种分布式松耦合构架平台,包括主服务Core和把构架解耦成若干个独立的应用程序作为的节点,其中,
主服务Core,用于建立各个节点之间的连接;并且管理所有节点之间的数据联系;
节点:用于从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
所述节点进一步包括:
RPC 模块:用于进行节点与节点之间的包括数据的序列化和反序列化、数据的分包和组包、RPC调用、和RPC服务开启在内的数据处理;其中RPC模块中主要包含:
1)网络发送接收模块:用于建立节点与节点之间、节点与主服务Core之间进行点对点的TCP/IP通信;
2)线程池模块:一个节点有且仅有一个线程池,线程池大小会根据运行环境动态增长,上限和不同操作***有关,线程池统一解决线程之间切换的代价,并且使创建线程的代价将为最低。
3)序列化与反序列化模块:利用Protobuf把网络接收的数据反序列化,并且把Protobuf类型的数据序列化为可用于网络发送字符流;
4)远程调用逻辑模块:利用接收到的经过反序列化的Protobuf类型数据,启动单独的线程去执行相应的处理函数;
消息路由接口模块:通过消息路由实现模块获取到所需要的消息的来源,或者希望发送的数据的去向;
用户接口模块:以API的形式提供给用户使用的接口,在RPC模块以及消息路由接口模块之上,通过封装RPC和消息路由接口模块的内容,提供简便的接口供编程者使用;用户接口模块主要提供的功能有:节点初始化,节点关闭,节点状态查询,发布消息接口,订阅消息接口,申请服务接口,申请客户端接口,日志控制接口等;用户可以使用的内容仅限于用户接口层所提供的内容。
主服务除了具有上述模块之外,额外还具有消息路由实现的模块,消息路由实现的模块根据各个节点的物理地址,消息订阅发布状态在内节点信息,实现消息的路由过程,并且可以通过消息路由接口模块来进行路由通道的查询。
一种分布式松耦合构架中的解耦方法,包括以下步骤:
(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;
(2)节点先进行对主服务Core注册节点操作,注册成功后返回和此节点通信的端口号,该节点监听此端口号,节点注册完成,主服务Core和节点物理连接建立完毕;
(3)节点预开启某一服务,先向主服务Core注册服务,Core返回注册成功与否状态;注册成功后则服务开启成功,注册失败则开启失败,返回错误代码;
(4) 节点预使用某一服务,先向主服务Core询问该服务的具***置,主服务core返回该服务包括是否存在或存在位置的信息,如果该服务不存在,则使用该服务失败;如果存在,则直接通过节点的RPC调用此服务。
本专利描述的SuroOS也是为了解决机器人复杂的需求而制作的平台。他是一个高效的分布式松耦合构架平台,其应用但不局限于机器人领域。以下仅以机器人领域来进行举例说明。SuroOS通过提供统一的松耦合通信接口,使得各个模块在代码表现上相对独立,来达到解耦的目的。
1)点对点(Peer -to-Peer)
SuroOS这个***在运行时是由一系列进程组合而成,这些进程可以运行在不同的主机上,不同的主机通过网络相互连接。每个进程之间的通信都是通过网络来完成的,网络可以是传统意义上得互联网,局域网,或者是无线网络。进程之间的消息传递是点对点的,也就是说消息不存在中转得过程,想要消息的进程可以直接从消息来源的进程得到数据。
点到点得结构需要一种方法去使得每个进程可以实时的找到于他们连接的进程的位置。我们称这种服务为消息路由的服务,而实现消息路由层的进程叫做Core,Core除了提供消息路由功能外,还提供了其他一些方便的服务。
2)高效
SuroOS是一个分布式构架平台,分布式***相对于非分布式而言最大的问题在于性能上会显得比非分布式来的差。而SuroOS也同样摆脱不了这个问题,但是其在性能方面做了很大程度的努力。
首先SuroOS目前的版本的语言是C++,C++相对于Java,Python等动态性语言在运行效率上具有得天独厚的优势。其次,SuroOS内部数据串行化和反串行化使用的Protobuf,Protobuf是Google公司提出并使用的通信协议、数据存储的结构化数据串行化方法。其相对XML来说具有大约5-10倍的性能优势。在主频2.5GHz,双核的电脑上,一个数据量为10的消息来回传递一次平均耗时为0.2毫秒。
以下表1分别是两个进程使用SuroOS来回传递消息1000次,所花的平均时间,时间单位为毫秒(ms)。本机指的是两个进程运行在同一个电脑上,网络指两个进程运行在不同电脑上,通过网络进行通信。数据量指的是每次消息占用的字节数。
3)模块之间的解耦
目前很多的机器人***都会提供各种机器人的驱动程序或是基本的采集模块以及一些机器人的算法框架或是一些机器人的高级算法如人脸识别,定位导航诸如此类。往往提供的内容越多,他得***结构也就越复杂,越不易使用,代码的耦合度也会随之而上升。
SuroOS本身并不提供上面提到的采集模块或是算法模块。SuroOS本身提供的功能仅仅是一种基本的跨操作***的跨语言的进程间数据交换方法或协议;他得主要功能就是让两个处于不同物理位置的节点能够最为简洁高效的进行数据通信。因此其并不对机器人本身,包括硬件,传感器,功能等等做任何层面的假设。具体机器人具有的功能完全是使用者赋予的。
SuroOS在实现的过程中采用了包括Boost,Qt,Com的很多思想。但构架的主要思想是设计模式中的观察者模式又称为发布订阅模式。任何的一个模块包括数据采集或是算法模块都可以方便的写成为SuroOS中的一个节点。节点和节点之间通过发布和订阅模式相互连接。单个节点可以发布任务数量的消息,也可以接受任意数量的消息;发布消息的节点并不关心哪个节点在订阅消息,同样的,订阅消息的节点也不关心消息是从哪里来的;通过此种发布和订阅的模式来实现进程间的消息交互。各个模块在编写代码时没有直接的连接关系,但是在运行时可以通过平台把各个节点动态的组装到一起。
4)跨操作***
机器人的运行平台多种多样,有Windows系列的Windows XP,Vista,Windows 7 等;还有Linux系列的操作***;另外还有多种多样的嵌入式操作***,包括嵌入式Linux,Windows Embedded 等。一个良好的,能够适应各种环境的机器人分布式平台必须能够具备支持多操作***的能力;只有能够支持跨操作***,才能使得使用者根据自身的情况对操作***做不同的选择。
SuroOS在设计初期,为了达成跨操作***的任务,在对第三方库的选择上均选择了能够跨操作***的库。包括boost,log4cpp,QT4,Protobuf,CMake,由于所选择的第三方库均能够支持跨操作***,而除第三方库外SuroOS内部实现均使用标准C++完成,不涉及操作***内容,所以SuroOS能够支持多操作***。目前以及编译通过且可以使用的平台有Windows系列,Linux系列 和 嵌入式Linux系列操作***。
5)跨编程语言
在机器人的编程语言中,根据不同的使用情况,不同的编程者,不同的环境,可以使用的编程语言会由很大程度的不同。比如侧重于底层代码开发的人一般情况下会习惯去使用C或者C++编程;侧重做算法实验的人可能会习惯于去使用Matlab,Python等动态语言;侧重把算法应用到实际中的人可能会习惯于去使用C++或者Java;侧重于用网站和机器人交互的又可能比较多得使用Java;编写移动终端的人如使用Andorid的人使用Java,而使用Iphone的使用Objective-C++。总而言之,机器人的编程语言多种多样,所以尽量多得去适应这种多语言的变换也是SuroOS在设计初期的目标之一。
SuroOS是设计成为能够支持所有Protobuf能够支持的编程语言。Protobuf目前的2.3版本能够支持的编程语言有C++,Java,Python,C#,因此SuroOS从理论上来说是可以开发支持以上四种编程语言的开发包的。不过,开发四种语言的开发包是一个比较复杂的工程,目前发布的SuroOS 1.3版本仅仅支持C++语言的开发包。下一步打算支持的语言有在Iphone上使用Objective-C++和Java,C#这几种语言。由于Objective-C++实际上是可以支持C++的,所以C++版本应该稍适修改后便可以应用在Iphone手持平台上。另外Java和C#在无论语法还是编程结构上都是类似的,而C#可以使用微软很多的先进技术,而Java的使用者在全球编程语言的使用率上更是超过了半数,且可以使用在目前流行的Android操作***上;基于以上考虑下一步我们准备制作Objective-C++和Java,C#的SDK版本。
6)多工具
为了使得SuroOS能够在线的完成各种各样的功能,在各种方面提供便利,我们把SuroOS设计成为是由很多个小工具组合而成的集体。每个小工具仅仅负责某个单一的功能,就好像Linux下面每个命令其实都是一个小工具一样,这些小工具组合而成进而形成一个功能强大,稳定,扩展性好得***。
这些工具可以在线的观看并控制程序的日志,进行日志的持久化,可以查看各个节点之间的相互连接关系,设置一些参数,关闭或者开启某些节点,记录并回放运行过程;以及辅助工程创建。当然我们希望实现的工具还远不止这些,只是认为这些工具是初期版本中比较实用的工具。随着SuroOS版本的前进,越来越多的便利的工具会被开发出来。
附图说明
图1为一种分布式松耦合构架平台的一结构原理示例图;
图2为一种分布式松耦合构架中的解耦方法的流程图;
图3为OsConsole示例图;
图4为A,B,C节点在运行的示意图;
图5为A,B,C节点在运行,osRecord在监听B1和C1消息,并进行记录的示意图;
图6为离线调试A,osPlayBack把osRecord记录的消息按顺序播放出来的示意图。
图7为PRC模块示意图。
具体实施方式
以下结合附图,具体说明本发明。
本发明的核心思想在于,本发明采用通用的消息机制与发布、订阅者模式(又称观察者模式)实现模块之间的通信。或者,采用客户端和服务端的模块来实现模块之间的通信。在本发明中,各个模块(即把构架解耦成若干个独立的应用程序,每一应用程序作为一节点),节点使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信。各个应用程序之间的数据交互,通过主服务知道节点中哪些数据需要交互,而且节点只需要将需要交互的数据彼此进行通信即可,即只关注其的输入(订阅的消息)和输出(发布的消息),而不去关心消息输入的具体实现方法,做到真正意义上的解耦。
请参阅图1,其为一种分布式松耦合构架平台的一结构原理示例图。主服务Core1位于某一计算机上,节点可以是多个,并且,节点可以与主服务Core1位于同一计算机上,也可以位于不同计算机。
在SuroOS平台上运行的所有进程都称为节点,一个进程是且只能是一个节点。SuroOS是一个分布式结构,他是由一系列节点所组成的。节点也可以理解为软件运行中的模块。在SuroOS运行的过程中,诺干节点组成一个点对点通信的图状结构。节点和节点之间通过发送消息互相通信。传递的消息是Protobuf类型的消息,其支持标准数据类型,包括int,float,double,char,bool,string等还支持数组和嵌套数据类型,即消息可以由其他消息组合而成。 节点和节点之间可以采用发布者,订阅者模式进行通讯,也可以使用服务,客户端模式进行通讯。
在SuroOS平台运行的过程中,需要有一个角色负责维护各个节点之间的物理连接关系,并做一个总体上得信息查询功能,主服务Core便是在SuroOS中起到了这个作用。每个节点在初始化的时候都需要向主服务Core进行注册,并且在发布订阅消息时,或者使用其他模式时,都需要向主服务Core注册事件,主服务Core返回给节点具体的注册结果。在整个运行过程中,主服务Core负责辅助各个节点建立其具体的物理连接,并且管理着节点的各种资源;并负责对各个节点发布的log进行汇总后转发;主服务Core还提供了一系列查询接口,使得各个节点可以方便的查询其他节点的工作状态。
在图1中,节点2与主服务Core1位于同一计算机11上。节点3与主服务Core1位于不同的计算机11、12上。与以消息机制与发布为例,本实例将该机制引入到分布式松耦合构架平台中,是一个技术上的创新。主服务Core1不管节点2、3是否在同一计算机上,在交互过程中都是通过点对点的TCP/IP通信,这种通信机制,能够支撑多种操作***,比如,有linux系列,有windows系列,有嵌入式系列的,也有移动终端平台系列的,包括IOS和Android等,能够支持尽量多得操作***具有很大的意义。
在运行时表现为主服务Core1和节点,在编译时表现为一系列类似API接口。在本实例中,利用SuroOS平台来实现上述功能,SuroOS的意思为Supcon Robot Operating System。但其不是传统意义上得操作***,而是构建在操作***层上的中间件***。但是其运行时和API的接口看来是和操作***一致的。操作***在运行的过程中,负责给各个进程提供各种消息机制,提供各种资源,同时在编码的过程中也是提供了各种API接口供各个程序所使用,从这个意义上,Operating System的概念是一致的。
实例一
请参阅图2,其为一种分布式松耦合构架中的解耦方法的流程图。它包括以下步骤:
S110:把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;
S120:在运行之前,节点先完成对主服务Core的注册,节点从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,其中发布消息为本节点能够提供的包括运行结果数据在内的数据信息,所述订阅消息为本节点需要的数据信息;
S130:运行后,节点把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收方节点接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
以下以一实例来具体说明上述流程。
主服务Core可以开在运行电脑上的任意一台,必须存在且唯一。在运行的过程中每个节点都需要知道主服务的IP地址以及端口号,此信息通过当前运行PC中的环境变量SURO_MASTER_URI中获取,如SURO_MASTER_URI=10.13.21.120:11234,代码主服务Core开启在10.13.21.120这台电脑上,端口为11234,所有运行节点的PC都需要设置此环境变量。
主服务Core线程池数量上限,堆栈大小决定了其可以负载的节点的最大上限,增大堆栈大小和线程池数量上限可以使得***可以容纳的节点数量增多,但同时也会加大主服务占用的内存数量。目前线程池上限设置为200,大约可以同时负载100个节点。网络超时时间等设置参数在编译时设置变量决定,如现在网络超时等待时间为6秒。在程序的编写过程中,存在网络抽象层和网络实现层,网络抽象层只负责实现网络相关的接口,而网络实现层具体实现网络收发数据的任务。网络实现层可以用TCP/IP协议,或者UDP协议,或是串口等任何可以收发数据的接口,目前版本使用的是TCP/IP协议实现。即主服务Core是全局唯一的,且主服务的ip地址和端口是从环境变量中获取的。其他配置如线程池个数,缓存区大小,网络超时时间,网络协议类型等由编译时确定。
主服务Core包括所有节点物理连接情况,订阅发布情况,客户端,服务的情况,日志的记录中转情况;还提供给所有节点注册模块的服务,以及解注册的服务,并会动态的通知所有节点他们关心的变化情况。
除了主服务Core外,其他运行时均表现为一个节点。且一个进程为一个节点,即节点在进程级别表现为单键。事实上,主服务Core也是节点,只不过是一个特殊节点。
节点包括通用的注册接口,解注册接口,关闭接口,发布消息接口,订阅消息接口,发布服务接口,调用服务接口。且每个节点均存在一个线程池,线程池大小会根据运行时动态增长,但是线程池最大大小在此节点程序编译时确定。
任意节点可以发布一定数量的消息,也可以接受一定数量的消息,并可以使用和发布一定数量的服务。具体的数量和操作***类型,操作***的资源如单进程句柄数量上限, 以及程序编译时设置的堆栈空间大小有关。任意节点发布的任意类型消息,都可以用一个消息记录软件记录安装时间顺序记录成文件保存下来,并且可以使用消息回放软件安装时间顺序,把记录的消息回放出去。
(a)使用线程池模块初始化线程池,使用节点模块初始化程序,使用节点模块随机一个可用端口号,使用此端口号向主服务去注册节点。主服务返回注册结果。
(b)注册成功后,节点开始开启服务端口,端口号为注册返回结果。若注册失败,则节点跟换端口号,继续向主服务core注册节点。
(c)当节点发布任意类型消息时,节点先向主服务core注册发布的消息,并从主服务处core获取订阅此消息的节点的所有信息。该节点根据获取的订阅消息节点的信息,建立和订阅节点之间的物理连接,并把消息序列化后,分包,然后发送给订阅消息的节点。
(d)当订阅者收到数据后,先组包,校验,然后反序列化成为相应的消息,并从线程池中调度一个空闲线程,去执行收到此消息后的回调函数。
(e)当节点订阅任意类型消息时,节点先向主服务core注册订阅此消息;在注册成功后,主服务会自动通知所有发布此消息的节点有人订阅;发布者就会自动连接订阅者,并把消息发布给订阅者了。
也就是说,在注册时,节点将本节点需要订阅消息、本节点包括端口信息在内的地址连接信息预先在主服务Core进行登记;在节点要预发布任何类型消息之前,节点先从主服务Core获得订阅此消息节点的所有信息。节点是通过设置RPC模块来进行数据的序列化和反序列化、数据的分包和组包过程、对外提供统一的RPC调用接口、和RPC服务开启接口;RPC过程为首先把需要发送的数据序列化,分包,然后再发送,当接收数据后组包,反序列化数据,然后从线程池中调用一个空闲线程去执行处理函数,最后把处理结果安装发送的方式回传给发送节点的RPC调用方。
具体地说,RPC过程是通过RPC模块来实现的(如图7所示),即RPC全称为Remote procedure call ,RPC模块又由网络抽象层,网络实现层,串行化反串行化模块,远程调用逻辑层组成。RPC模块从网络实现层接收到打包的数据,然后经网络抽象层调用后,由串行化和反串行化的模块反串行化后,把打包的数据解析成程序理解的数据然后上送到远程调用逻辑层;远程调用逻辑层根据数据内容校验,然后去调用相应绑定的回调函数,并且把回调函数返回的结果串行化后,通过网络抽象层的调用后通过网络实现层发送出去。
其中远程调用逻辑层根据接收到的反串行化的数据,根据服务所绑定的消息,分析消息的具体内容和归属,如果存在相应的归属,则调用相应的回调函数;如归属不存在,则认为是异常数据,丢弃。
串行化和反串行化模块主要依靠Protobuf完成;ProtoBuf是***提出的,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。使用Protobuf产生的数据类型具有串行化为字符串并且从字符串中反串行化的能力。串行化和反串行化模块从网络抽象层获取数据然后通过Protobuf把数据反串行化为Protobuf子类型数据,并且根据回调函数返回数据通过Protobuf把数据串行化为字符串,然后通过网络抽象层发送出去。
网络实现层的数据接收和发送使用boost中的Aiso库实现,boost aiso是一个跨平台的网络及底层IO的C++编程库;网络实现层中网络协议使用TCP/IP,网络实现层全部使用异步方式实现,连接中断后具有自动重连的机制,对于大数据包的发送会切分成小数据包按顺序发送。
本***还设置log记录***,其log记录***使用统一的分级接口,设置可打印和/或网络传送;所有日志发送给主服务,主服务会把具体的日志整合后发送给控制台程序或者任意希望接收日志的节点。
即,在机器人程序的开发调试过程中,打印信息是一种很有用得调试手段。打印信息可以让调试者直接在屏幕上看到,比较直观简单。但是打印往往会使得代码比较混乱,到处都是打印,调试完毕后还需要把打印代码去除,当再次需要时又需要再次输入代码。而SuroOS提供了一种分级的日志记录***(即log记录***),其使用Log4cpp完成,表现形式类似于标准输出cout。任意一个节点可以使用任意数量层次的日志,每一个层次的日志信息又可以分为Fatal,Error,Warn,Info,Debug五个日志级别,可以编码控制层次级别,也可以在程序运行的过程中进行控制。这五个层次的日志级别高低为Fatal > Error > Warn > Info > Debug, 当一个层次的日志级别设置为Info后,Debug级别的日志就不会被输出出来了。另外,日志***可以配合OsConsole这个工具使用,OsConsole见图3.log记录***具有log观看,过滤,选择,持久化功能的控制台工具。并且此控制台程序也是众多节点中的一个。度且LOG记录***,LOG提供的Debug,Info, Warn , Error, Fatal 5个级别,可以分别记录不同级别,不同模块的Log,并可以使用控制台程序持久化的保持所有Log为文件,在运行过程中,OsConsole可以查看当时在线的节点,并且控制所有在线节点的任意层次日志的级别信息,如图3下半部分左边为所有节点,中间部分为选中节点的所有层次日志,右边为所选择层次日志的级别信息,选择其他级别信息便可以改变级别状态。此外,OsConsole还具有把所有日志分类别,分时间在电脑上进行持久化的功能,便于在机器人长时间运行后来查看状况和问题。
此功能可以大大的提供调试编码的效率;因为在写程序的过程中,不可避免的需要对代码进行调试,调试的过程中,大部分会需要使用到cout,printf之类的方法,而使用cout,printf这类方法的代码在程序调试完成后往往是需要删除的,但是删除以后可能又会面临在一次的调试,又需要重新加入这类代码。因此这种方法在调试的时候可以加入Debug级别的调试信息,在代码觉得调试完成后,可以把默认log界别设置成Info或者Warn或者更高,那么这个时候Debug的log内容就不会打印了。如果哪一天在调试的过程中又希望看到Debug的调试内容,只需要把相应层次的log级别设置为Debug,就可以看到Debug信息了。
使用的具体log接口为:
LOGS_DEBUG("TestLevel1")<<"Log Hello World Debug";
TestLevel1层次的日志,log级别为Debug,内容为Log Hello World Debug
另外,在调试单个节点时存在非常大的便利性。在开发过程中,通常是完成诺干节点后去调试某一个节点的功能。平台分布式松耦合的结构使得调试单个节点变得便利许多。图4是A,B,C三个节点正在运行,A节点接收B1和C1消息,B发布B1消息,C发布C1消息。在线的时候,可以在一个连续的状态下单独观察A的状态。很多情况下,调试者往往希望能够单独来调试A节点的程序。这时,可以使用OsRecord记录下其他节点发布的消息,如图5所示,osRecord正在记录B1和C1消息,并保存成文件。当记录完毕后,可以使用OsPlayBack工具把记录下得消息按照时间顺序播放出来,也可以一个消息一个消息间隔的发布出来,如图6所示。而此时,A节点便可以进行离线状态下得调试过程了,无论是使用日志***查看打印信息,还是使用IDE进行单步调试,都可以很方便的完成。并且这个调试的过程可以完整的执行任意多次,其保证每次的输入都是一致的,在机器人应用上可以表现为采样一次数据,调试任意次的效果;这种方式大大的提高程序开发人员的便利性。
本***采用了Protobuf做为核心的数据格式,解析速度和编码大小的性能上都远远超过XML。目前支持的操作***有Linux系列,windows系列,嵌入式ARM linux系列。另外对于消息之间传递的实时性做了很大程度的优化,本机订阅和发布消息的平均延时可以做到0.2ms。Protobuf其具有灵活、高效、自动的优点, 有如XML,不过它更小、更快、也更简单。可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构,甚至可以在无需重新部署程序的情况下更新数据结构。 支持多种语言包括C++,java,C#,Python等。
基于上述流程,本发明提供的一种分布式松耦合构架平台,包括主服务Core和把构架解耦成若干个独立的应用程序作为的节点,其中,
主服务Core,用于建立各个节点之间的连接;并且管理所有节点之间的数据联系;
节点:用于从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
所述节点进一步包括:
RPC 模块:用于进行节点与节点之间的包括数据的序列化和反序列化、数据的分包和组包、RPC调用、和RPC服务开启在内的数据处理;其中RPC模块中主要包含:
1)网络发送接收模块:用于建立节点与节点之间、节点与主服务Core之间进行点对点的TCP/IP通信;
2)线程池模块:一个节点有且仅有一个线程池,线程池大小会根据运行环境动态增长,上限和不同操作***有关,线程池统一解决线程之间切换的代价,并且使创建线程的代价将为最低。
3)序列化与反序列化模块:利用Protobuf把网络接收的数据反序列化,并且把Protobuf类型的数据序列化为可用于网络发送字符流;
4)远程调用逻辑模块:利用接收到的经过反序列化的Protobuf类型数据,启动单独的线程去执行相应的处理函数;
消息路由接口模块:通过消息路由实现模块获取到所需要的消息的来源,或者希望发送的数据的去向;
用户接口模块:以API的形式提供给用户使用的接口,在RPC模块以及消息路由接口模块之上,通过封装RPC和消息路由接口模块的内容,提供简便的接口供编程者使用;用户接口模块主要提供的功能有:节点初始化,节点关闭,节点状态查询,发布消息接口,订阅消息接口,申请服务接口,申请客户端接口,日志控制接口等;用户可以使用的内容仅限于用户接口层所提供的内容。
主服务除了具有上述的模块之外,额外还具有消息路由实现的模块,消息路由实现的模块根据各个节点的物理地址,消息订阅发布状态在内节点信息,实现消息的路由过程,并且可以通过消息路由接口模块来进行路由通道的查询。
以上公开的仅为一种模块划分方式,这种模块可以是硬件实现,也可以是软件来实现,但是现有技术中通常采用软件来实现,仅是一种功能划分。
实例二
一种分布式松耦合构架中的解耦方法,包括以下步骤:
(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;
(2)节点先进行对主服务Core注册节点操作,注册成功后返回和此节点通信的端口号,该节点监听此端口号,节点注册完成,主服务Core和节点物理连接建立完毕;
(3)节点预开启某一服务,先向主服务Core注册服务,Core返回注册成功与否状态;
(4) 节点预使用某一服务,先向主服务Core询问该服务的具***置,主服务core返回该服务包括是否存在或存在位置的信息,如果该服务不存在,则使用该服务失败;如果存在,则直接通过节点的RPC调用此服务。
SuroOS中节点进行通信还可以使用服务,客户端模式。服务提供方需要提供此服务的输入输出接口形式,并且具体实现此服务的具体内容;而客户端使用服务提供者的输入输出接口去调用服务,其不关心服务具体的实现过程,主要关注于服务的接口形式。此模式在代码中表现为RPC(Remote procedure call)形式的远程函数调用方法。在此,就不再详细说明。
Claims (12)
1.一种分布式松耦合构架中的解耦方法,其特征在于,包括以下步骤:
(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;
(2)在运行之前,节点先完成对主服务Core的注册,节点从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,其中发布消息为本节点能够提供的包括运行结果数据在内的数据信息,所述订阅消息为本节点需要的数据信息;
(3)运行后,节点把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收方节点接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
2.如权利要求1所述的方法,其特征在于,步骤(2)具体包括:
在注册时,节点将本节点需要订阅消息、本节点包括端口信息在内的地址连接信息预先在主服务Core进行登记;
在节点要预发布任何类型消息之前,节点先从主服务Core获得订阅此消息节点的所有信息。
3.如权利要求1所述的方法,其特征在于,接收方节点接收到对应消息的处理过程为:
从本节点所在终端的网络实现层接收到打包的数据,然后经网络抽象层调用后,再经过反串行化,后把打包的数据解析成程序理解的数据然后上送到远程调用逻辑层;远程调用逻辑层根据数据内容校验,然后去调用相应绑定的回调函数,并且把回调函数返回的结果串行化后,通过网络抽象层的调用后通过网络实现层发送出去。
4.如权利要求1所述的方法,其特征在于,设置log记录***,其log记录***使用统一的分级接口,设置可打印和/或网络传送;所有日志发送给主服务,主服务会把具体的日志整合后发送给控制台程序或者任意希望接收日志的节点。
5.如权利要求1所述的方法,其特征在于,任意节点发布的任意类型消息,用一个消息记录软件记录安装时间顺序记录成文件保存下来,并且使用消息回放软件安装时间顺序,把记录的消息回放出去。
6.如权利要求1所述的方法,其特征在于,节点是通过设置RPC模块来进行数据的序列化和反序列化、数据的分包和组包过程、对外提供统一的RPC调用接口、和RPC服务开启接口;RPC过程为首先把需要发送的数据序列化,分包,然后再发送,当接收数据后组包,反序列化数据,然后从线程池中调用一个空闲线程去执行处理函数,最后把处理结果安装发送的方式回传给发送节点的RPC调用方法。
7.如权利要求1所述的方法,其特征在于, 还包括:
每个节点设置一个线程池来进行节点所需线程的调度工作,以最大限度地减小线程调度的代价。
8.如权利要求7所述的方法,其特征在于,主服务Core是全局唯一的,且主服务的ip地址和端口是从环境变量中获取的,包括线程池个数,缓存区大小,网络超时时间,网络协议类型在内的配置由编译时确定,在运行的过程中每个节点都需要知道主服务的IP地址以及端口号,此信息通过当前运行PC中的环境变量SURO_MASTER_URI中获取。
9.一种分布式松耦合构架平台,其特征在于,包括主服务Core和把构架解耦成若干个独立的应用程序作为的节点,其中,
主服务Core,用于建立各个节点之间的连接;并且管理所有节点之间的数据联系;
节点:用于从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
10.如权利要求9所述的一种分布式松耦合构架平台,其特征在于,所述节点进一步包括:
RPC 模块:用于进行节点与节点之间的包括数据的序列化和反序列化、数据的分包和组包、RPC调用、和RPC服务开启在内的数据处理;其中RPC模块中主要包含:
1)网络发送接收模块:用于建立节点与节点之间、节点与主服务Core之间进行点对点的TCP/IP通信;
2)线程池模块:一个节点有且仅有一个线程池,线程池大小会根据运行环境动态增长,上限和不同操作***有关,线程池统一解决线程之间切换的代价,并且使创建线程的代价将为最低;
3)序列化与反序列化模块:利用Protobuf把网络接收的数据反序列化,并且把Protobuf类型的数据序列化为可用于网络发送字符流;
4)远程调用逻辑模块:利用接收到的经过反序列化的Protobuf类型数据,启动单独的线程去执行相应的处理函数;
消息路由接口模块:通过消息路由实现模块获取到所需要的消息的来源,或者希望发送的数据的去向;
用户接口模块:以API的形式提供给用户使用的接口,在RPC模块以及消息路由接口模块之上,通过封装RPC和消息路由接口模块的内容,提供简便的接口供编程者使用;用户接口模块主要提供的功能有:节点初始化,节点关闭,节点状态查询,发布消息接口,订阅消息接口,申请服务接口,申请客户端接口,日志控制接口等;用户可以使用的内容仅限于用户接口层所提供的内容。
11.如权利要求9所述的一种分布式松耦合构架平台,其特征在于, 主服务额外还具有消息路由实现的模块,消息路由实现的模块根据各个节点的物理地址,消息订阅发布状态在内节点信息,实现消息的路由过程,并且可以通过消息路由接口模块来进行路由通道的查询。
12.一种分布式松耦合构架中的解耦方法,其特征在于,包括以下步骤:
(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;
(2)节点先进行对主服务Core注册节点操作,注册成功后返回和此节点通信的端口号,该节点监听此端口号,节点注册完成,主服务Core和节点物理连接建立完毕;
(3)节点预开启某一服务,先向主服务Core注册服务,Core返回注册成功与否状态;注册成功后则服务开启成功,注册失败则开启失败,返回错误代码;
(4) 节点预使用某一服务,先向主服务Core询问该服务的具***置,主服务core返回该服务包括是否存在或存在位置的信息,如果该服务不存在,则使用该服务失败;如果存在,则直接通过节点的RPC调用此服务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104338507A CN102523225A (zh) | 2011-12-22 | 2011-12-22 | 分布式松耦合构架中的解耦方法及分布式松耦合构架平台 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104338507A CN102523225A (zh) | 2011-12-22 | 2011-12-22 | 分布式松耦合构架中的解耦方法及分布式松耦合构架平台 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102523225A true CN102523225A (zh) | 2012-06-27 |
Family
ID=46294017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011104338507A Pending CN102523225A (zh) | 2011-12-22 | 2011-12-22 | 分布式松耦合构架中的解耦方法及分布式松耦合构架平台 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102523225A (zh) |
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104426983A (zh) * | 2013-09-05 | 2015-03-18 | 携程计算机技术(上海)有限公司 | 网站建设***及方法 |
CN104615489A (zh) * | 2015-01-22 | 2015-05-13 | 江苏大烨智能电气股份有限公司 | 一种多节点数据交互的实现方法 |
CN105577533A (zh) * | 2016-03-18 | 2016-05-11 | 微梦创科网络科技(中国)有限公司 | 一种分布式的消息投放***和方法 |
CN103763325B (zh) * | 2014-01-26 | 2017-02-01 | 深圳英飞拓科技股份有限公司 | 构建ip安防产品开发环境的方法 |
CN106444490A (zh) * | 2016-09-08 | 2017-02-22 | 中国电子科技集团公司第三十二研究所 | 基于嵌入式实时操作***的机器人操作*** |
CN106681843A (zh) * | 2015-11-05 | 2017-05-17 | 中国科学院沈阳自动化研究所 | 一种基于组件式开发模式松耦合的子模块间参数传递方法 |
CN107172032A (zh) * | 2017-05-10 | 2017-09-15 | 北京邮电大学 | 一种基于南向接口协议的通信方法及相关设备 |
CN107276968A (zh) * | 2016-04-07 | 2017-10-20 | 深圳市萨法瑞科技有限公司 | 一种网络传输方法及*** |
CN107273126A (zh) * | 2017-06-15 | 2017-10-20 | 中国银行股份有限公司 | 应用开发方法和装置 |
CN107818019A (zh) * | 2016-09-12 | 2018-03-20 | 北京百度网讯科技有限公司 | 用于机器人操作***的数据同步方法和装置 |
CN109639673A (zh) * | 2018-12-11 | 2019-04-16 | 江苏电力信息技术有限公司 | 一种基于订阅-发布模式的流媒体数据传输方法 |
CN110007969A (zh) * | 2019-01-15 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 一种嵌入式应用及业务实现方法 |
CN110058935A (zh) * | 2019-04-26 | 2019-07-26 | 广州华多网络科技有限公司 | 日志级别调整方法、装置及***、可读存储介质 |
CN110162389A (zh) * | 2019-05-15 | 2019-08-23 | 广州视源电子科技股份有限公司 | 应用程序的启动方法、装置和智能交互设备 |
CN110187902A (zh) * | 2019-04-15 | 2019-08-30 | 中国平安人寿保险股份有限公司 | 基于spring boot的项目改造方法、装置、设备及存储介质 |
CN110647324A (zh) * | 2019-09-18 | 2020-01-03 | 奇码(杭州)教育科技有限公司 | Python与Scratch交互式编程方法及电子设备 |
CN110943911A (zh) * | 2019-12-19 | 2020-03-31 | 北京轻元科技有限公司 | 基于protobuf的物联网高效数据传输方法 |
CN111082993A (zh) * | 2019-12-25 | 2020-04-28 | 中国航空工业集团公司沈阳飞机设计研究所 | 基于数据传输服务的软硬件解耦设计的***设计方法 |
CN111176632A (zh) * | 2020-01-02 | 2020-05-19 | 山东浪潮通软信息科技有限公司 | 一种iOS端响应式开发框架的搭建方法 |
CN111221659A (zh) * | 2018-11-23 | 2020-06-02 | 北京图森智途科技有限公司 | 一种多机器人操作***环境的订阅性能追踪*** |
CN111311007A (zh) * | 2020-02-21 | 2020-06-19 | 安徽海螺信息技术工程有限责任公司 | 一种分布式能源消耗动态监测和调度分析的方法 |
WO2021128602A1 (zh) * | 2019-12-24 | 2021-07-01 | 网宿科技股份有限公司 | 一种数据传输的方法和装置 |
CN113596111A (zh) * | 2021-07-08 | 2021-11-02 | 南京智联达科技有限公司 | 一种基于分布式的节点间通信方法 |
CN113965468A (zh) * | 2021-09-15 | 2022-01-21 | 中国航空工业集团公司西安飞机设计研究所 | 一种公共框架网络设计方法 |
CN114157529A (zh) * | 2021-12-01 | 2022-03-08 | 东方财富信息股份有限公司 | 一种分布式数据传输***及方法 |
CN115052031A (zh) * | 2022-05-24 | 2022-09-13 | 广州大学 | 一种非ros程序与ros程序的交互通信*** |
CN116382879A (zh) * | 2023-06-06 | 2023-07-04 | 北京理工大学出版社有限责任公司 | 一种具备通用性的耦合数据交换技术架构 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050195819A1 (en) * | 2004-03-02 | 2005-09-08 | Michihiko Goto | Communication device |
CN102148800A (zh) * | 2010-02-09 | 2011-08-10 | 中国人民解放军总参谋部第六十一研究所 | 基于面向服务架构的软件无线电*** |
-
2011
- 2011-12-22 CN CN2011104338507A patent/CN102523225A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050195819A1 (en) * | 2004-03-02 | 2005-09-08 | Michihiko Goto | Communication device |
CN102148800A (zh) * | 2010-02-09 | 2011-08-10 | 中国人民解放军总参谋部第六十一研究所 | 基于面向服务架构的软件无线电*** |
Non-Patent Citations (2)
Title |
---|
DADALAN: "如何降低一个程序的耦合性", 《HTTP://BLOG.CSDN.NET/DADALAN/ARTICLE/DETAILS/3861616》 * |
林晓志等: "大型***软件消息总线的一种设计实现", 《电脑开发与应用》 * |
Cited By (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104426983A (zh) * | 2013-09-05 | 2015-03-18 | 携程计算机技术(上海)有限公司 | 网站建设***及方法 |
CN103763325B (zh) * | 2014-01-26 | 2017-02-01 | 深圳英飞拓科技股份有限公司 | 构建ip安防产品开发环境的方法 |
CN104615489B (zh) * | 2015-01-22 | 2018-02-23 | 江苏大烨智能电气股份有限公司 | 一种多节点数据交互的实现方法 |
CN104615489A (zh) * | 2015-01-22 | 2015-05-13 | 江苏大烨智能电气股份有限公司 | 一种多节点数据交互的实现方法 |
CN106681843A (zh) * | 2015-11-05 | 2017-05-17 | 中国科学院沈阳自动化研究所 | 一种基于组件式开发模式松耦合的子模块间参数传递方法 |
CN105577533A (zh) * | 2016-03-18 | 2016-05-11 | 微梦创科网络科技(中国)有限公司 | 一种分布式的消息投放***和方法 |
CN107276968A (zh) * | 2016-04-07 | 2017-10-20 | 深圳市萨法瑞科技有限公司 | 一种网络传输方法及*** |
CN106444490A (zh) * | 2016-09-08 | 2017-02-22 | 中国电子科技集团公司第三十二研究所 | 基于嵌入式实时操作***的机器人操作*** |
CN107818019A (zh) * | 2016-09-12 | 2018-03-20 | 北京百度网讯科技有限公司 | 用于机器人操作***的数据同步方法和装置 |
CN107818019B (zh) * | 2016-09-12 | 2019-01-15 | 北京百度网讯科技有限公司 | 用于机器人操作***的数据同步方法和装置 |
US11126639B2 (en) | 2016-09-12 | 2021-09-21 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Method and apparatus for synchronizing data in a robot operating system |
CN107172032A (zh) * | 2017-05-10 | 2017-09-15 | 北京邮电大学 | 一种基于南向接口协议的通信方法及相关设备 |
CN107273126A (zh) * | 2017-06-15 | 2017-10-20 | 中国银行股份有限公司 | 应用开发方法和装置 |
CN111221659A (zh) * | 2018-11-23 | 2020-06-02 | 北京图森智途科技有限公司 | 一种多机器人操作***环境的订阅性能追踪*** |
CN111221659B (zh) * | 2018-11-23 | 2023-10-03 | 北京图森智途科技有限公司 | 一种多机器人操作***环境的订阅性能追踪*** |
CN109639673A (zh) * | 2018-12-11 | 2019-04-16 | 江苏电力信息技术有限公司 | 一种基于订阅-发布模式的流媒体数据传输方法 |
CN110007969A (zh) * | 2019-01-15 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 一种嵌入式应用及业务实现方法 |
CN110187902B (zh) * | 2019-04-15 | 2024-06-07 | 中国平安人寿保险股份有限公司 | 基于spring boot的项目改造方法、装置、设备及存储介质 |
CN110187902A (zh) * | 2019-04-15 | 2019-08-30 | 中国平安人寿保险股份有限公司 | 基于spring boot的项目改造方法、装置、设备及存储介质 |
CN110058935A (zh) * | 2019-04-26 | 2019-07-26 | 广州华多网络科技有限公司 | 日志级别调整方法、装置及***、可读存储介质 |
CN110058935B (zh) * | 2019-04-26 | 2022-07-22 | 广州方硅信息技术有限公司 | 日志级别调整方法、装置及***、可读存储介质 |
CN110162389A (zh) * | 2019-05-15 | 2019-08-23 | 广州视源电子科技股份有限公司 | 应用程序的启动方法、装置和智能交互设备 |
CN110647324A (zh) * | 2019-09-18 | 2020-01-03 | 奇码(杭州)教育科技有限公司 | Python与Scratch交互式编程方法及电子设备 |
CN110647324B (zh) * | 2019-09-18 | 2023-05-16 | 编缘(杭州)教育科技有限公司 | Python与Scratch交互式编程方法及电子设备 |
CN110943911A (zh) * | 2019-12-19 | 2020-03-31 | 北京轻元科技有限公司 | 基于protobuf的物联网高效数据传输方法 |
WO2021128602A1 (zh) * | 2019-12-24 | 2021-07-01 | 网宿科技股份有限公司 | 一种数据传输的方法和装置 |
US11303737B2 (en) | 2019-12-24 | 2022-04-12 | Wangsu Science & Technology Co., Ltd. | Method and device for data transmission |
CN111082993A (zh) * | 2019-12-25 | 2020-04-28 | 中国航空工业集团公司沈阳飞机设计研究所 | 基于数据传输服务的软硬件解耦设计的***设计方法 |
CN111176632A (zh) * | 2020-01-02 | 2020-05-19 | 山东浪潮通软信息科技有限公司 | 一种iOS端响应式开发框架的搭建方法 |
CN111311007B (zh) * | 2020-02-21 | 2023-01-13 | 安徽海螺信息技术工程有限责任公司 | 一种分布式能源消耗动态监测和调度分析的方法 |
CN111311007A (zh) * | 2020-02-21 | 2020-06-19 | 安徽海螺信息技术工程有限责任公司 | 一种分布式能源消耗动态监测和调度分析的方法 |
CN113596111A (zh) * | 2021-07-08 | 2021-11-02 | 南京智联达科技有限公司 | 一种基于分布式的节点间通信方法 |
CN113596111B (zh) * | 2021-07-08 | 2024-02-09 | 南京智联达科技有限公司 | 一种基于分布式的节点间通信方法 |
CN113965468A (zh) * | 2021-09-15 | 2022-01-21 | 中国航空工业集团公司西安飞机设计研究所 | 一种公共框架网络设计方法 |
CN113965468B (zh) * | 2021-09-15 | 2024-01-30 | 中国航空工业集团公司西安飞机设计研究所 | 一种公共框架网络设计方法 |
CN114157529A (zh) * | 2021-12-01 | 2022-03-08 | 东方财富信息股份有限公司 | 一种分布式数据传输***及方法 |
CN114157529B (zh) * | 2021-12-01 | 2024-01-23 | 东方财富信息股份有限公司 | 一种分布式数据传输***及方法 |
CN115052031A (zh) * | 2022-05-24 | 2022-09-13 | 广州大学 | 一种非ros程序与ros程序的交互通信*** |
CN115052031B (zh) * | 2022-05-24 | 2023-05-19 | 广州大学 | 一种非ros程序与ros程序的交互通信*** |
CN116382879A (zh) * | 2023-06-06 | 2023-07-04 | 北京理工大学出版社有限责任公司 | 一种具备通用性的耦合数据交换技术架构 |
CN116382879B (zh) * | 2023-06-06 | 2023-08-29 | 北京理工大学出版社有限责任公司 | 一种具备通用性的耦合数据交换技术架构 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102523225A (zh) | 分布式松耦合构架中的解耦方法及分布式松耦合构架平台 | |
Grimm et al. | Programming for pervasive computing environments | |
JP4038564B2 (ja) | コンピュータ型システムおよびデータ処理タスクを実行する方法 | |
US7676791B2 (en) | Implementation of concurrent programs in object-oriented languages | |
CN111381983B (zh) | 虚拟试验靶场验证***的轻量级消息中间件***及方法 | |
Le Blanc et al. | HPC: A model of structure and change in distributed systems | |
CN115150454A (zh) | 一种跨操作***的中心化发布订阅通信中间件 | |
CN100538650C (zh) | 基于组件的网格中间件互交互方法 | |
CN102722377B (zh) | 基于ace框架的网络视频应用处理*** | |
CN116389552A (zh) | 一种基于发布订阅模型的异构数据传输*** | |
CN116980475B (zh) | 一种基于binlog与双环形缓冲区的数据推送*** | |
CN103763325B (zh) | 构建ip安防产品开发环境的方法 | |
Banerjee et al. | Programming paradigm and the internet of things | |
CN103870280A (zh) | 基于flex与jsp的网页无缝结合处理方法 | |
Escoffier et al. | Reactive Systems in Java | |
Ciatto et al. | TuSoW: Tuple spaces for edge computing | |
Krishnamurthy et al. | Programming frameworks for Internet of Things | |
CN100464303C (zh) | 构件化软件***中实现分布式业务逻辑计算的方法 | |
Guillen-Scholten et al. | A channel-based coordination model for components | |
Pham et al. | A dynamic platform for run-time adaptation | |
Singhai | QuarterWare: A middleware toolkit of software RISC components | |
Jahed | Automatic Distribution and Cloud-Native Deployment of Executable Component and Connector Model | |
Trevathan et al. | A unique solution for designing low-Cost, heterogeneous sensor networks using a middleware integration platform | |
JP4550085B2 (ja) | メッセージの型を利用するオブジェクト連携装置 | |
Wang et al. | Software architecture based on message queue |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120627 |