XMLRPC是什么?
關(guān)于ROS節(jié)點(diǎn)建立連接的技術(shù)細(xì)節(jié),官方文檔說的非常簡單,在這里ROS Technical Overview。沒有基礎(chǔ)的同學(xué)看這個(gè)介紹必然還是不懂。
在ROS中,節(jié)點(diǎn)與節(jié)點(diǎn)之間的通信依靠節(jié)點(diǎn)管理器(master)牽線搭橋。
master像一個(gè)中介,它介紹節(jié)點(diǎn)們互相認(rèn)識。一旦節(jié)點(diǎn)們認(rèn)識了以后,master就完成自己的任務(wù)了,它就不再摻和了。
這也是為什么你啟動(dòng)節(jié)點(diǎn)后再殺死m(xù)aster,節(jié)點(diǎn)之間的通信依然保持正常的原因。
使用過電驢和迅雷而且研究過BitTorrent的同學(xué)對master的工作方式應(yīng)該很熟悉,master就相當(dāng)于Tracker服務(wù)器,它存儲著其它節(jié)點(diǎn)的信息。
我們每次下載之前都會查詢Tracker服務(wù)器,找到有電影資源的節(jié)點(diǎn),然后就可以與它們建立連接并開始下載電影了。
那么master是怎么給節(jié)點(diǎn)牽線搭橋的呢?ROS使用了一種叫XMLRPC的方式實(shí)現(xiàn)這個(gè)功能。
XMLRPC中的RPC的意思是遠(yuǎn)程過程調(diào)用(Remote Procedure Call)。
簡單來說,遠(yuǎn)程過程調(diào)用的意思就是一個(gè)計(jì)算機(jī)中的程序(在我們這就是節(jié)點(diǎn)啦)可以調(diào)用另一個(gè)計(jì)算機(jī)中的函數(shù),只要這兩個(gè)計(jì)算機(jī)在一個(gè)網(wǎng)絡(luò)中。
這是一種聽上去很高大上的功能,它能讓節(jié)點(diǎn)去訪問網(wǎng)絡(luò)中另一臺計(jì)算機(jī)上的程序資源。
XMLRPC中的XML我們在1.1節(jié)講消息序列化時(shí)提到了,它就是一種數(shù)據(jù)表示方式而已。
所以合起來,XMLRPC的意思就是把由XML表示的數(shù)據(jù)發(fā)送給其它計(jì)算機(jī)上的程序運(yùn)行。
運(yùn)行后返回的結(jié)果仍然以XML格式返回回來,然后我們通過解析它(還原回純粹的數(shù)據(jù))就能干別的事了。
想了解更多XMLRPC的細(xì)節(jié)可以看這個(gè)XML-RPC:概述。
舉個(gè)例子,一個(gè)XMLRPC請求是下面這個(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 >
如果你沒學(xué)過HTTP協(xié)議,看上面的語句可能會感到陌生?!秷D解HTTP》這本小書可以讓你快速入門。
HTTP報(bào)文比較簡單,它分兩部分,前半部分是頭部,后半部分是主體。
頭部和主體之間用空行分開,這都是HTTP協(xié)議規(guī)定的標(biāo)準(zhǔn)。
上面主體部分的格式就是XML,見的多了你就熟悉了。
所以,XMLRPC傳遞的消息其實(shí)就是主體部分是XML格式的HTTP報(bào)文而已,沒什么神秘的。
對應(yīng)客戶端一個(gè)XMLRPC請求,服務(wù)器端會執(zhí)行它并返回一個(gè)響應(yīng),它也是一個(gè)HTTP報(bào)文,如下。
它的結(jié)構(gòu)和請求一樣,不再解釋了。所以,XMLRPC跟我們上網(wǎng)瀏覽網(wǎng)頁的過程其實(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文章
219瀏覽量
24443 -
管理器
+關(guān)注
關(guān)注
0文章
246瀏覽量
18526 -
ROS
+關(guān)注
關(guān)注
1文章
278瀏覽量
17019
發(fā)布評論請先 登錄
相關(guān)推薦
評論