XMLRPC是什么?
關(guān)于ROS節(jié)點(diǎn)建立連接的技術(shù)細(xì)節(jié),官方文檔說(shuō)的非常簡(jiǎn)單,在這里ROS Technical Overview。沒(méi)有基礎(chǔ)的同學(xué)看這個(gè)介紹必然還是不懂。
在ROS中,節(jié)點(diǎn)與節(jié)點(diǎn)之間的通信依靠節(jié)點(diǎn)管理器(master)牽線搭橋。
master像一個(gè)中介,它介紹節(jié)點(diǎn)們互相認(rèn)識(shí)。一旦節(jié)點(diǎn)們認(rèn)識(shí)了以后,master就完成自己的任務(wù)了,它就不再摻和了。
這也是為什么你啟動(dòng)節(jié)點(diǎn)后再殺死m(xù)aster,節(jié)點(diǎn)之間的通信依然保持正常的原因。
使用過(guò)電驢和迅雷而且研究過(guò)BitTorrent的同學(xué)對(duì)master的工作方式應(yīng)該很熟悉,master就相當(dāng)于Tracker服務(wù)器,它存儲(chǔ)著其它節(jié)點(diǎn)的信息。
我們每次下載之前都會(huì)查詢Tracker服務(wù)器,找到有電影資源的節(jié)點(diǎn),然后就可以與它們建立連接并開(kāi)始下載電影了。
那么master是怎么給節(jié)點(diǎn)牽線搭橋的呢?ROS使用了一種叫XMLRPC的方式實(shí)現(xiàn)這個(gè)功能。
XMLRPC中的RPC的意思是遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call)。
簡(jiǎn)單來(lái)說(shuō),遠(yuǎn)程過(guò)程調(diào)用的意思就是一個(gè)計(jì)算機(jī)中的程序(在我們這就是節(jié)點(diǎn)啦)可以調(diào)用另一個(gè)計(jì)算機(jī)中的函數(shù),只要這兩個(gè)計(jì)算機(jī)在一個(gè)網(wǎng)絡(luò)中。
這是一種聽(tīng)上去很高大上的功能,它能讓節(jié)點(diǎn)去訪問(wèn)網(wǎng)絡(luò)中另一臺(tái)計(jì)算機(jī)上的程序資源。
XMLRPC中的XML我們?cè)?.1節(jié)講消息序列化時(shí)提到了,它就是一種數(shù)據(jù)表示方式而已。
所以合起來(lái),XMLRPC的意思就是把由XML表示的數(shù)據(jù)發(fā)送給其它計(jì)算機(jī)上的程序運(yùn)行。
運(yùn)行后返回的結(jié)果仍然以XML格式返回回來(lái),然后我們通過(guò)解析它(還原回純粹的數(shù)據(jù))就能干別的事了。
想了解更多XMLRPC的細(xì)節(jié)可以看這個(gè)XML-RPC:概述。
舉個(gè)例子,一個(gè)XMLRPC請(qǐng)求是下面這個(gè)樣子的。因?yàn)閄MLRPC是基于HTTP協(xié)議的,所以下面的就是個(gè)標(biāo)準(zhǔn)的HTTP報(bào)文。
POST / HTTP/1.1
User-Agent: XMLRPC++ 0.7
Host: localhost:11311
Content-Type: text/xml
Content-length: 78
< ?xml version="1.0"? >
< methodCall >
< methodName >circleArea< /methodName >
< params >
< param >
< value >< double >2.41< /double >< /value >
< /param >
< /params >
< /methodCall >
如果你沒(méi)學(xué)過(guò)HTTP協(xié)議,看上面的語(yǔ)句可能會(huì)感到陌生?!秷D解HTTP》這本小書(shū)可以讓你快速入門(mén)。
HTTP報(bào)文比較簡(jiǎn)單,它分兩部分,前半部分是頭部,后半部分是主體。
頭部和主體之間用空行分開(kāi),這都是HTTP協(xié)議規(guī)定的標(biāo)準(zhǔn)。
上面主體部分的格式就是XML,見(jiàn)的多了你就熟悉了。
所以,XMLRPC傳遞的消息其實(shí)就是主體部分是XML格式的HTTP報(bào)文而已,沒(méi)什么神秘的。
對(duì)應(yīng)客戶端一個(gè)XMLRPC請(qǐng)求,服務(wù)器端會(huì)執(zhí)行它并返回一個(gè)響應(yīng),它也是一個(gè)HTTP報(bào)文,如下。
它的結(jié)構(gòu)和請(qǐng)求一樣,不再解釋了。所以,XMLRPC跟我們上網(wǎng)瀏覽網(wǎng)頁(yè)的過(guò)程其實(shí)差不多。
HTTP/1.1 200 OK
Date: Sat, 06 Oct 2001 23:20:04 GMT
Server: Apache.1.3.12 (Unix)
Connection: close
Content-Type: text/xml
Content-Length: 124
< ?xml version="1.0"? >
< methodResponse >
< params >
< param >
< value >< double >18.24668429131< /double >< /value >
< /param >
< /params >
< /methodResponse >
-
節(jié)點(diǎn)
+關(guān)注
關(guān)注
0文章
220瀏覽量
24528 -
管理器
+關(guān)注
關(guān)注
0文章
248瀏覽量
18618 -
ROS
+關(guān)注
關(guān)注
1文章
280瀏覽量
17102
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
系統(tǒng)鏡像Ubuntu_ROS2中ROS2是什么意思,帶有ROS2開(kāi)發(fā)環(huán)境嗎?
如何在ROS2中運(yùn)行小烏龜呢
ROS簡(jiǎn)介
怎樣去使用ROS中的launch啟動(dòng)文件呢
基于FreeRTOS的micro(微型)ROS
![基于FreeRTOS的micro(微型)<b class='flag-5'>ROS</b>](https://file.elecfans.com/web1/M00/C8/2A/pIYBAF9tim2AHt85AAAgW-UsIuY014.png)
ROS中的序列化實(shí)現(xiàn)
ROS是如何實(shí)現(xiàn)XMLRPC的
節(jié)點(diǎn)是如何調(diào)用XMLRPC的
![節(jié)點(diǎn)是如何調(diào)用<b class='flag-5'>XMLRPC</b>的](https://file1.elecfans.com/web2/M00/A4/70/wKgaomUC1lmAZzbdAACqshrCH5w643.jpg)
ROS核心框架介紹
![<b class='flag-5'>ROS</b>核心框架介紹](https://file1.elecfans.com/web2/M00/B1/AE/wKgZomVcgG6AQ-34AAD1NFzWWHI989.jpg)
ROS中的TF該如何使用
![<b class='flag-5'>ROS</b><b class='flag-5'>中</b>的TF該如何使用](https://file1.elecfans.com/web2/M00/B2/0D/wKgZomVdyAiANzofAADxPMylMsU065.jpg)
ros的基本概念是什么
ROS2中自帶例程測(cè)試
![<b class='flag-5'>ROS</b>2<b class='flag-5'>中</b>自帶例程測(cè)試](https://file1.elecfans.com/web2/M00/B3/53/wKgZomVlo_CAd--WAABWL4F62os161.jpg)
在TogetherROS中如何安裝ROS2功能包
![在TogetherROS<b class='flag-5'>中</b>如何安裝<b class='flag-5'>ROS</b>2功能包](https://file1.elecfans.com/web2/M00/B3/F9/wKgZomVpj5WACHnRAAY288PAUoU611.jpg)
評(píng)論