色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

節點是如何調用XMLRPC的

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月居 ? 2023-09-14 17:52 ? 次閱讀

節點間通過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只在節點建立連接的過程中起作用,但是并不參與節點之間最終的數據傳輸。

節點在請求建立連接時會通過master.cpp文件中的execute()函數調用XMLRPC庫中的函數。

我們舉個例子,加入talker節點要發布消息,它會調用topic_manager.cpp中的TopicManager::advertise()函數,在函數中會調用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方法在哪里被執行了呢?我們來到ros_comm-noetic-develtoolsrosmastersrcrosmaster路徑下,打開master_api.py文件,然后搜索registerPublisher這個方法,就會找到對應的代碼,如下。

匆匆掃一眼就知道,它在通知所有訂閱這個消息的節點,讓它們做好接收消息的準備。

你可能注意到了,這個被調用的XMLRPC是用python語言實現的。

也就是說,XMLRPC通信時只要報文的格式是一致的,不管C++還是python語言,都可以實現遠程調用的功能。

def registerPublisher(self, caller_id, topic, topic_type, caller_api):
        try:
            self.ps_lock.acquire()
            self.reg_manager.register_publisher(topic, caller_id, caller_api)
            # don't let '*' type squash valid typing
            if topic_type != rosgraph.names.ANYTYPE or not topic in self.topics_types:
                self.topics_types[topic] = topic_type
            pub_uris = self.publishers.get_apis(topic)
            sub_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
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 節點
    +關注

    關注

    0

    文章

    220

    瀏覽量

    24456
  • 管理器
    +關注

    關注

    0

    文章

    246

    瀏覽量

    18549
  • MASTER
    +關注

    關注

    0

    文章

    104

    瀏覽量

    11298
  • ROS
    ROS
    +關注

    關注

    1

    文章

    278

    瀏覽量

    17035
收藏 人收藏

    評論

    相關推薦

    屬性節點調用節點的使用教程

    很多朋友對于屬性節點的使用表示有些不明白,但是其作用又是相當強大的,所以必須明白怎么使用屬性節點以及如何調用的問題,下面就來為大家解迷。在獲得對象的reference之后,就可以使用屬性節點
    發表于 01-05 16:05

    調用庫函數節點

    如圖,調用出來后的庫函數節點,怎樣配置其輸入輸出函數???
    發表于 05-13 16:35

    布爾控件觸發調用節點

    大神們,怎么用布爾控件觸發調用節點的重新初始化為默認值?
    發表于 05-14 15:03

    通過vi調用節點調用vi的問題

    通過vi節點,打開前面板,運行vi等等。但是比如說我需要從用戶登錄界面,通過vi調用節點,打開某個試驗界面,同時希望是淡入淡出的效果,也就是通過設置透明度來實現。可是開運行到節點的時候
    發表于 08-23 21:41

    調用節點的求助

    調用節點調用方法的控件值的設置
    發表于 04-09 11:50

    屬性節點調用節點的區別?

    請問,屬性節點調用節點的區別?
    發表于 11-21 12:00

    調用庫函數節點

    調用庫函數節點有什么作用
    發表于 09-14 21:55

    labview 調用節點找不到

    請問,這些調用節點怎么找不到,好惱火
    發表于 02-22 20:29

    labview dll節點調用的問題

    調用節點的時候出現這種情況怎么解決?
    發表于 04-16 14:44

    labview的matlab節點能否調用互相調用的matlab程序

    labview的matlab節點能否調用互相調用的matlab程序
    發表于 07-09 19:54

    labview 調用DLL節點出錯

    [問答] labview 調用DLL節點出錯提示 錯誤1517labview :(Hex 0x5ED)調用節點發生錯誤不知道哪位大神能幫忙解決一下回
    發表于 11-12 18:39

    屬性節點調用節點的動態引用問題

    本帖最后由 蕭獵 于 2021-9-10 16:27 編輯 各位大神: 目前關于屬性節點調用節點的引用問題,有靜態引用,即如下圖:也有先將各引用常量組織成數組,通過對數組的處理,動態的按程序
    發表于 09-07 14:39

    ROS中XMLRPC是什么

    XMLRPC是什么? 關于ROS節點建立連接的技術細節,官方文檔說的非常簡單,在這里ROS Technical Overview。沒有基礎的同學看這個介紹必然還是不懂。 在ROS中,節點節點
    的頭像 發表于 09-14 17:40 ?1016次閱讀

    ROS是如何實現XMLRPC

    XMLRPC的C++代碼在下載后的ros_comm-noetic-develutilitiesxmlrpcpp路徑下。 還好,整個工程不算太大。XMLRPC分成客戶端和服務器端兩大部分。 咱們先看
    的頭像 發表于 09-14 17:45 ?715次閱讀

    ROS中節點管理器master是如何被啟動的

    我們來看看節點管理器master是如何被啟動的,再回到parent.pystart()函數,如下。 我們發現它啟動了XMLRPC服務器后,接下來就調用了_init_runner()函數。 def
    的頭像 發表于 09-14 18:03 ?1718次閱讀
    主站蜘蛛池模板: 坠落的丝袜美人妻| 青草久久精品亚洲综合专区| 永久免费无码AV国产网站| 欧美大片xxxxbbbb| 黑丝袜论坛| 儿子日母亲B好爽| 91精品福利一区二区| 亚洲精品第一综合99久久| 日本最新免费区中文| 美女pk精子4| 精品无码一区二区三区中文字幕| 国产AV无码一二三区视频| 97人摸人人澡人人人超一碰| 亚洲免费国产| 息与子在线交尾中文字幕| 人成片在线观看亚洲无遮拦| 六级黄色片| 旧里番6080在线观看| 精品无人区麻豆乱码无限制| 国产欧美日韩综合精品一区二区| 成人在线小视频| bl肉yin荡受np各种play| 中国女人精69xxxxxx视频| 亚洲免费观看视频| 亚州天堂在线视频av| 手机免费毛片| 少妇一夜未归暴露妓女身份| 日本久久道一区二区三区| 欧美成a人片免费看久久| 伦理片秋霞免费影院| 久久午夜伦理| 久久久久国产一级毛片高清片| 精品国产乱码久久久久久乱码| 国内精品乱码卡一卡2卡三卡新区 国内精品乱码卡一卡2卡三卡 | 强行撕开衣服捏胸黄文| 蜜桃99影院| 免费毛片在线播放| 麻豆婷婷狠狠色18禁久久| 麻豆AV福利AV久久AV| 美女夫妻内射潮视频| 免费人成网站在线观看10分钟|