ROS源码学习 七、MasterServer:Topic&Service

2021SC@SDUSC

目录

一、写在前面

二、MasterServer与MasterServerRegisterationImpl的关系

三、MasterServer

四、关于syncronized

五、总结


一、写在前面

        在上一篇博客中,我们学写了MasterServer的组成部分Node、Topic与Service的层次结构并分析了三者相关信息类的源码.本篇博客将重点分析Topic与Service的注册注销服务与MasterServer在高层次进行注册注销的逻辑.

二、MasterServer与MasterServerRegisterationImpl的关系

        

        在MasterServer中,有一个对象MasterServerRegistrationImpl负责管理注册的Topic、Service与Node,MasterServer主要负责接收注册注销信息并保证这些动作的有序进行.简而言之,MasterServer的注册与注销等功能主要是为了提供一个的花名册供各Node了解到目前能够提供的服务并注册自己的服务通过MasterServer让其他Node获知.在实际的系统运行中,各个Node的功能调用是peer-to-peer的,MasterServer在这个层面上仅提供名称管理的功能.

三、MasterServer

public void registerService(GraphName nodeName, URI nodeSlaveUri, GraphName serviceName,
      URI serviceUri) {
    synchronized (masterRegistrationManager) {
      masterRegistrationManager.registerService(nodeName, nodeSlaveUri, serviceName, serviceUri);
    }
  }

public boolean unregisterService(GraphName nodeName, GraphName serviceName, URI serviceUri) {
    synchronized (masterRegistrationManager) {
      return masterRegistrationManager.unregisterService(nodeName, serviceName, serviceUri);
    }
  }

1、

        registerService接收node名称、nodeURI、service名称、serviceURI作为参数,使用synchronized关键字获取masterRegistrationManager对象上的锁,此对象就是前文中提到的实际执行注册注销功能的对象.在进入互斥区后调用manager的registerService方法并传递参数组.

        unregisterService方法接收与上一个方法相同的参数,在进入互斥区后调用manager的同名方法并将参数组传递.

        在上篇博客中提到过,无论是service还是topic都是node不同功能根据其特点的分类,因此service与topic均是依附于node的,在注册注销service与topic时都要指明其存在的node.这一点也会在我们后续分析MasterServerRegistrationImpl对应的方法时得到进一步证实.

public List<URI> registerSubscriber(GraphName nodeName, URI nodeSlaveUri, GraphName topicName,
      String topicMessageType) {
    if (DEBUG) {
      log.info(String.format(
          "Registering subscriber %s with message type %s on node %s with URI %s", topicName,
          topicMessageType, nodeName, nodeSlaveUri));
    }

   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值