小白剛?cè)腴T(mén)缺脉,如有不足之處請(qǐng)多指教。謝謝悦穿!
今天簡(jiǎn)單記錄一下XML-RPC 的學(xué)習(xí)過(guò)程攻礼。
1.什么是XML-RPC?
最簡(jiǎn)單的方式當(dāng)然是百度啦栗柒。但是我基礎(chǔ)太差了礁扮,看百度都頭大:
XML-RPC的全稱(chēng)是XML Remote Procedure Call知举,即XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)子集)遠(yuǎn)程過(guò)程調(diào)用。它是一套允許運(yùn)行在不同操作系統(tǒng)太伊、不同環(huán)境的程序?qū)崿F(xiàn)基于Internet過(guò)程調(diào)用的規(guī)范和一系列的實(shí)現(xiàn)雇锡。這種遠(yuǎn)程過(guò)程調(diào)用使用http作為傳輸協(xié)議,XML作為傳送信息的編碼格式僚焦。Xml-Rpc的定義盡可能的保持了簡(jiǎn)單锰提,但同時(shí)能夠傳送、處理芳悲、返回復(fù)雜的數(shù)據(jù)結(jié)構(gòu)立肘。這個(gè)過(guò)程也被大家稱(chēng)為“分布式計(jì)算”。
我的理解就是在一臺(tái)電腦上的數(shù)據(jù)名扛,通過(guò)xml-rpc的形式谅年,可以在另外一臺(tái)電腦上訪問(wèn)。如果看百度不清楚還是直接看程序吧:
(選自 https://blog.csdn.net/comprel/article/details/72633406 )
2.兩個(gè)庫(kù)
類(lèi)庫(kù):xmlrpclib? ? 一般使用在客戶端肮韧,這個(gè)模塊用來(lái)調(diào)用注冊(cè)在XML-RPC服務(wù)器端的函數(shù)融蹂,xmlrpclib并不是一個(gè)類(lèi)型安全的模塊,無(wú)法抵御惡意構(gòu)造的數(shù)據(jù)弄企,這方面的一些處理工作需要交給開(kāi)發(fā)者自己殿较。
類(lèi)庫(kù):SimpleXMLRPCServer? 一般是用在服務(wù)器端,這個(gè)模塊用來(lái)構(gòu)造一個(gè)最基本的XML-RPC服務(wù)器框架(單線程服務(wù)器)
大致用法:使用SimpleXMLRPCServer模塊運(yùn)行XMLRPC服務(wù)器桩蓉,在其中注冊(cè)服務(wù)器提供的函數(shù)或者對(duì)象淋纲;然后在客戶端內(nèi)使用xmlrpclib.ServerProxy連接到服務(wù)器,想要調(diào)用服務(wù)器的函數(shù)院究,直接調(diào)用ServerProxy即可洽瞬。
服務(wù)端:
第4行:服務(wù)端定義了get_power這個(gè)函數(shù),其結(jié)果是n^m业汰。
第7行:“0.0.0.0”輸入自己的localhost伙窃,后面的“8081”是端口。(要注意端口是否被占用样漆,防火墻是否開(kāi)放該端口为障,鏈接:https://jingyan.baidu.com/article/624e745902cebc34e9ba5a58.html)(入站規(guī)則和出站規(guī)則都改一下)
tips:
1. 服務(wù)端和客戶端要在一臺(tái)主機(jī)上做測(cè)試的話,要不全寫(xiě)成"localhost"或者全寫(xiě)成"127.0.0.1"形式,要不全寫(xiě)成自己的內(nèi)網(wǎng)IP或外網(wǎng)IP,如"192.168.0.10"形式;
2. 不在同一個(gè)主機(jī)上的話放祟,服務(wù)端本地地址不能寫(xiě)成"127.0.0.1"或者"localhost"鳍怨,而要寫(xiě)成自己的內(nèi)網(wǎng)IP或外網(wǎng)IP形式。
3. 最簡(jiǎn)單一種方法:服務(wù)端地址寫(xiě)成""形式跪妥。
第9行:注冊(cè)該函數(shù)鞋喇。
第10行:開(kāi)始啟動(dòng)服務(wù)器。
客服端:
第1行:xmlrpclib 及 simplexmlrpcserver都是python2自帶的不需要安裝第三方庫(kù)眉撵。
第3行:客服端的localhost和之前設(shè)定的端口侦香。(為了更好的區(qū)別不同服務(wù))
第4落塑、5行:調(diào)用在服務(wù)端定義的函數(shù)。
簡(jiǎn)單的xml-rpc就完成啦罐韩『读蓿看程序比看文字好理解很多,大致就是遠(yuǎn)程調(diào)用服務(wù)端上的數(shù)據(jù)散吵、函數(shù)等等龙考。只是其調(diào)用方式使用http作為傳輸協(xié)議,XML作為傳送信息的編碼格式错蝴。(http協(xié)議和xml編碼格式可以了解一下(菜鳥(niǎo)教程):http://www.runoob.com/http/http-tutorial.html? ? http://www.runoob.com/xml/xml-tutorial.html)
3.一些簡(jiǎn)單的使用:
https://blog.csdn.net/comprel/article/details/72633482
https://blog.csdn.net/comprel/article/details/72633406
4.記錄一些遇到的問(wèn)題及經(jīng)驗(yàn):
connection refused:
檢查端口是否被占用洲愤;檢查防火墻設(shè)置出、入站規(guī)則顷锰;檢查localhost是否正確柬赐;
如何查看localhost:
windows一般是127.0.0.1.但是要注意區(qū)別localhost、ip官紫、127.0.0.1肛宋。linux可以嘗試在命令行中 hostname -i 查看
localhost、127.0.0.1區(qū)別:(資料來(lái)自:https://www.cnblogs.com/rendd/p/5928733.html)
localhost意為本地主機(jī)束世,指這臺(tái)計(jì)算機(jī)酝陈,是給回路網(wǎng)絡(luò)接口的標(biāo)準(zhǔn)主機(jī)名,對(duì)應(yīng)的IP地址為127.0.0.1毁涉,可訪問(wèn)本地服務(wù)器的web項(xiàng)目(http://localhost)沉帮。
1.localhost不通過(guò)網(wǎng)卡傳輸,不受防火墻和網(wǎng)卡限制贫堰;而127.0.0.1則依賴(lài)于網(wǎng)卡穆壕,會(huì)受到防火墻和網(wǎng)卡的限制。
2.localhost訪問(wèn)時(shí)帶著本機(jī)當(dāng)前用戶的權(quán)限其屏;而用IP訪問(wèn)時(shí)喇勋,是通過(guò)網(wǎng)絡(luò)再去訪問(wèn)主機(jī),涉及到網(wǎng)絡(luò)用戶權(quán)限偎行。
3.因?yàn)橛胠ocalhost訪問(wèn)時(shí)不會(huì)解析成IP川背,也就不會(huì)占用網(wǎng)絡(luò)資源,因此一般情況下用localhost更方便快捷蛤袒。
無(wú)法訪問(wèn)本地的localhost怎么辦呢熄云?:
打開(kāi)http://127.0.0.1/ 看是否能訪問(wèn)IIS(互聯(lián)網(wǎng)信息服務(wù))的默認(rèn)網(wǎng)頁(yè),能訪問(wèn)則說(shuō)明IIS已經(jīng)成功開(kāi)啟汗盘,否則檢查IIS是否在本機(jī)安裝且開(kāi)啟皱碘;
開(kāi)始--命令(cmd)--ping localhost,看返回的數(shù)據(jù)是否為127.0.0.1隐孽,如果是則說(shuō)明可以解析localhost癌椿,否則打開(kāi)C:\WINDOWS\system32\drivers\etc\host文件看里面有沒(méi)有127.0.0.1 localhost,添加好后再去訪問(wèn)localhost菱阵;
關(guān)閉電腦上的防火墻試試踢俄,或檢查電腦上是否有惡意插件;
實(shí)在不行將IIS卸載掉晴及,重新安裝一次都办。
電腦沒(méi)有iis:
這是我遇到最可惡的事情了。我的是win10ghost版虑稼,為了系統(tǒng)穩(wěn)定很多功能都精簡(jiǎn)掉了琳钉。如果和我一樣的朋友,快點(diǎn)重裝吧蛛倦,不要多想了歌懒。