iT邦幫忙

DAY 15
5

emacs的30天學習筆記系列 第 35

Web Service 閒談- 1998年 XML-RPC談起

  • 分享至 

  • xImage
  •  

在wiki上:http://en.wikipedia.org/wiki/XML-RPC
XML-RPC 在1988年發表,多年後,這個標準併入SOAP, 所以gsoap2的原作者在範例裏,
展示XML-RPC,JSON-RPC,表示它們系出同源。

而2006年,專利(patent)判由3個人所持有,這3個人不是1998年發表的人,目前授權給另一家公司使用。原來這也是可以申請專利的。

Linux 申請專利,也有個故事,最近智慧財產專利,就是微軟要和HTC的手機用戶收權利機,HTC每賣一枝手機就要付一枝的權利金,真好賺,而也是前陣子,google買了moto的手機部門,就是為了持有moto的專利。只是專利變成錢,還是有段路。

曾經SCO UNIX 告IBM linux侵權,是個最妙的例子,因為IBM到現在沒有出自己客製的LINUX版本,卻被告,而微軟也要挑有錢的linux公司來告侵權,更別說apple公司興起訴訟,
有一次HTC 說,他們比apple公司更早近10年在生產手機,怎可能抄襲apple的技術呢?專利很妙。

W3C上那麼多協定(protocol),都有專利嗎?沒人實作的話,只是白紙黑字,會有作用嗎?實作的人不擁有專利。感覺好像DRAM代工,或CD/DVD代工,做到流汗,卻賺的少少。
協定有專利,實作的人也有專利,用的人該付那段的錢呢? 扯遠了。

http://xmlrpc-c.sourceforge.net/doc/上,可以理解,
Remote procedure call 實際上是一個程式在這台計算機 呼叫另一台計算機上的程式。

XML-RPC是標準的網路協定讓,讓電腦可以 talk to each other 。
這篇文章舉了一些
RPC的例子,更棒的是舉了一些不是RPC的例子:
long-lived connection such as an SSH login session.
長期間的SSH 連線程式
high volume transfer such as an FTP download.
大容量移轉如FTP 下載。
one-way transmission such as a UDP packet.
單向傳輸如UDP 封包 。
dialogue such as an SMTP (mail) transaction.
交談/對話如SMTP (mail)交易過程。

所以從反例,可以推得RPC 也不是包山包海,無所不包。

其他的HTTP-based RPC protocols. SOAP and CORBA是其中有名的,
而REST-RPC是比較年輕的項目。


Xmlrpc-c 是一個XML-RPC For C/C++的工具和函式庫。

分為Super Stable(超級舊),Stable(普通舊),Advanced(新)。

因為超級舊下載的程式,編譯到curl不過,用新的下載。

如果有裝了版本控制svn client(subversion 用戶端)。
直接下下面的指令:

REPOS=http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/advanced
svn checkout $REPOS xmlrpc-c

用傳統的3步來安裝。

應該是順利安裝吧? 筆者是沒遇到什麼問題,倒是安裝超級舊版時,還在**./configure** 加上 --without ,才安裝好。

然後,準備從原作者準備的範例中,學習一下,這個庫要怎麼用。

從**~/xmlrpc-c$ cd exapmles**的README,原作者把操作使用放在make(Makefile)裏,意思是模仿Makefile裏的作法來實作自己的XML-RPC程式即可 。

那就make,看一下Makefile吧。

用emacs時 ,筆者喜歡用emacs -nw 模式開啟,預設的文法關鍵字highlight 高亮的顏色就很美了。
第一張圖是make 過程中的節錄,有顏色哦,而且排列還蠻整齊,如果要自己下指令,抄這個版本,雖然很長,但讓人看起來覺得很有條理。

第二張圖是emacs下的Makefile,顏色也很漂亮。

make完了,

接著可以實行範例,這是個兩個數相加的XML_RPC 範例,

開兩個指令窗:
一個執行

$ ./xmlrpc_sample_add_server 8080
Running XML-RPC server...

把server on 起來,準備接受client端的xml_rpc 呼叫。
而另 一個就是

~/xmlrpc-c/examples$ ./xmlrpc_sample_add_client
Making XMLRPC call to server url 'http://localhost:8080/RPC2' method 'sample.add' to request the sum of 5 and 7...
The sum is 12

呼叫 xml_rpc server , 傳回運算後的值。

這時會講,說好的xml呢?
那就小結吧!(哈)
小結:
gsoap2 時,或說gsoap,會有個WSDL(xml格式),交待saop request 和respone, 參數的
型別,和resource(資源,url)的位置資訊,

這些在XML_RPC的入門手冊:http://xmlrpc-c.sourceforge.net/doc/
還的確不明顯,從對照組的比較,可以發現,可能xmlrpc 沒有WSDL這類的規定,
那可能引起更多的疑問。

目前,從xmlrpc_sample_add_client.c,xmlrpc_sample_add_server.c
看得出呼叫的架構,也許這就是早期的協定,沒有soap那麼繁複吧。

上回在winxp上,mingw 編譯總是undefined refererence一堆,
後來是看make的輸出,發現一個參數,才編譯過,所以最近常會看make的輸出。
而g++目前還不太會用,
記錄了一些 make的過程:

make -C /home/timloo/xmlrpc-c/src/ -f /home/timloo/xmlrpc-c/src/Makefile \
libxmlrpc_client.so

make -C /home/timloo/xmlrpc-c/lib/expat/xmltok/ -f /home/timloo/xmlrpc-c/lib/expat/xmltok/Makefile \
libxmlrpc_xmltok.so

g++ -shared -Wl,-soname,libxmlrpc_client++.so.7 client.osh client_simple.osh curl.osh libwww.osh wininet.osh pstream.osh -L. -lxmlrpc++ -lxmlrpc_packetsocket -Lblddir/src -lxmlrpc_client -lxmlrpc -L/home/timloo/xmlrpc-c/lib/expat/xmlparse -lxmlrpc_xmlparse -L/home/timloo/xmlrpc-c/lib/expat/xmltok -lxmlrpc_xmltok -L/home/timloo/xmlrpc-c/lib/libutil -lxmlrpc_util -o libxmlrpc_client++.so.7.28
rm -f libxmlrpc_cpp.so
ln -s libxmlrpc_cpp.so.7.28 libxmlrpc_cpp.so
rm -f libxmlrpc_server_cgi++.so
ln -s libxmlrpc_server_cgi++.so.7.28 libxmlrpc_server_cgi++.so
rm -f libxmlrpc_server_pstream++.so
ln -s libxmlrpc_server_pstream++.so.7.28 libxmlrpc_server_pstream++.so
rm -f libxmlrpc_server_abyss++.so
ln -s libxmlrpc_server_abyss++.so.7.28 libxmlrpc_server_abyss++.so
rm -f libxmlrpc_client++.so
ln -s libxmlrpc_client++.so.7.28 libxmlrpc_client++.so

****<a href=""></a>


上一篇
Web Service 之外:微軟 的ISA Proxy server
下一篇
懷舊C語言:1988 The C Programming Language 2nd Edition(PART V)
系列文
emacs的30天學習筆記38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
pqr0007
iT邦研究生 1 級 ‧ 2011-11-14 22:22:37

no comments!

我要留言

立即登入留言