节点是如何调用XMLRPC的

发布时间:2023-09-14  

节点间通过XMLRPC建立连接

在一个节点刚启动的时候,它并不知道其它节点的存在,更不知道它们在交谈什么,当然也就谈不上。

所以,它要先与master对话查询其它节点的状态,然后再与其它节点通信。

而节点与master对话使用的就是XMLRPC。

从这一点来看,master叫节点管理器确实名副其实,它是一个大管家,给刚出生的节点提供服务。

下面我们以两个节点:talker和listener为例,介绍其通过XMLRPC建立通信连接的过程,如下图所示。

  1. talker注册

假设我们先启动talker。启动后,它通过1234使用XMLRPC向master注册自己的信息,包含所发布消息的名。master会将talker的注册信息加入注册列表中;

2.listener注册

listener启动后,同样通过XMLRPC向master注册自己的信息,包含需要订阅的话题名;

3.master进行匹配

master根据listener的订阅信息从注册列表中查找,如果没有找到匹配的发布者,则等待发布者的加入,如果找到匹配的发布者信息,则通过XMLRPC向listener发送talker的地址信息。

4.listener发送连接请求

listener接收到master发回的talker地址信息,尝试通过XMLRPC向talker发送连接请求,传输订阅的话题名、消息类型以及通信协议(TCP或者UDP);

5.talker确认连接请求

talker接收到listener发送的连接请求后,继续通过XMLRPC向listener确认连接信息,其中包含自身的TCP地址信息;

6.listener尝试与talker建立连接

listener接收到确认信息后,使用TCP尝试与talker建立连接。

7.talker向listener发布消息

成功建立连接后,talker开始向listener发送话题消息数据,master不再参与。

从上面的分析中可以发现,前五个步骤使用的通信协议都是XMLRPC,最后发布数据的过程才使用到TCP。

master只在节点建立连接的过程中起作用,但是并不参与节点之间最终的数据传输。

节点在请求建立连接时会通过masr.cpp文件中的execute()函数调用XMLRPC库中的函数。

我们举个例子,加入talker节点要发布消息,它会调用toc_manager.cpp中的TopicManager::verse()函数,在函数中会调用execute()函数,该部分代码如下。

XmlRpcValue args, result, payload;
  args[0] = this_node::getName();
  args[1] = ops.topic;
  args[2] = ops.datatype;
  args[3] = xmlrpc_manager_- >getServerURI();
  master::execute("registerPublisher", args, result, payload, true);

其中,registerPublisher就是一个远程过程调用的方法(或者叫函数)。节点通过这个远程过程调用向master注册,表示自己要发布发消息了。

你可能会问,registerPublisher方法在哪里被执行了呢?我们来到_comm-noet-develtoolsrosmastercrosmaster路径下,打开master_api.py文件,然后搜索registerPublisher这个方法,就会找到对应的代码,如下。

匆匆扫一眼就知道,它在通知所有订阅这个消息的节点,让它们做好接收消息的准备。

你可能注意到了,这个被调用的XMLRPC是用语言实现的。

也就是说,XMLRPC通信时只要报文的格式是一致的,不管还是python语言,都可以实现远程调用的功能。

def registerPublisher(self, caller_id, topic, topic_type, caller_api):
        try:
            self.ps_lock.quire()
            self.reg_manager.register_publisher(topic, caller_id, caller_api)
            # don't let '*' type squash valid typing
            if topic_type != rosgraph.names.ANYTYPE  not topic in self.topics_types:
                self.topics_types[topic] = topic_type
            pub_uris = self.publishers.get_apis(topic)
            _uris = self.subscribers.get_apis(topic)
            self._notify_topic_subscribers(topic, pub_uris, sub_uris)
            mloginfo("+PUB [%s] %s %s",topic, caller_id, caller_api)
            sub_uris = self.subscribers.get_apis(topic)            
        finally:
            self.ps_lock.release()
        return 1, "Registered [%s] as publisher of [%s]"%(caller_id, topic), s
文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    单片机编程用什么软件?单片机开发软件有哪些?;单片机编程需要的软件其实不多,网上看了很一大堆,什么protues仿真、Labview、Pycharm等等,其实完全没必要一下装这么多。 我从......
    stm32单片机用什么软件编程;  今天要和大家分享的是stm32单片机用什么软件编程相关信息。   想学单片机开发,最主要是熟悉stm32的软件开发环境,目前stm32的开发环境,主流是KEIL和......
    stm32用什么软件写程序;  stm32用什么软件写程序?STM32单片机在编程时可以使用库函数和使用配置寄存器的方式来进行程序的实现。   在学习stm32的过程中我们会用到编程环境:Keil......
    开发了诊断数据表的解析模块(支持Excel和ODX格式),实现对测试脚本参数的自动配置,从而提高效率。01ODX实现方式ODX使用统一建模语言UML类图来描述的,ODX数据又是通过XML文件......
    STM32单片机GPIO口配置问题;  在学习STM32F单片机时,我们常常困惑什么时候才能叫入门,采用什么样的教材入门,或者采用什么的编程软件。在学习类的教材中,以神州,原点教材布局很多,但是......
    有个__init__.py文件,说明这个文件夹是一个包,打开__init__.py文件找到def main(argv=sys.argv),这就是roscore调用的函数roslaunch.main的实......
    形式为DIP40,相信大家在大学里学单片机的时候老师都是用这一款教的吧。 3 硬件原理设计 芯片选型完毕之后,又有了设计思路,那就赶快把电路图画出来吧。画电路图用什么软件呢?这样的EDA工具很多,像......
    、铣床、镗床、火花机、车床,这些数控机床上有许多电气元件需要配合动作,因此检修检测根据情况需要选择合适的仪器设备,比如测电压电流静态参数,用什么仪器设备?如果分析信号波形时序是否正常,又需要用什么仪器设备? ......
    文稿编辑器中则是智能参考线。 其他实用改进项 可使用本地 XML 文件向电子表格编辑器中进行数据导入; 3D 图表旋转设置; 乌兹别克语词典(西里尔文和拉丁文); 打开图表时的显示错误栏。 ......
    ":"D:ProgramFilesGitbinbash.exe"然后按Ctrl+` 就可以打开终端,看到Bash了 (4)配置智能补全、智能感知插件。 前面我们安装了 LLVM 用它来实现智能补全,与纠错,自然就需要一个路径去寻找这些文件......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>