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