<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SimpleXMLRPCServer
python標準庫中自帶的模組,無需另外安裝
在python3中 SimpleXMLRPCServer已經被合併到xmlrpc.server
class SimpleXMLRPCServer.SimpleXMLRPCServer(addr[, requestHandler[, logRequests[, allow_none[, encoding[, bind_and_activate]]]])
1.SimpleXMLRPCServer.register_function(function[, name])
2.SimpleXMLRPCServer.register_instance(instance[, allow_dotted_names])
3.SimpleXMLRPCServer.register_introspection_functions()
4.SimpleXMLRPCServer.register_multicall_functions()
例如:
伺服器端
from SimpleXMLRPCServer import SimpleXMLRPCServer def respon_string(str): return "get string :%s"%str if __name__ == '__main__': s = SimpleXMLRPCServer(('0.0.0.0', 8080)) s.register_function(respon_string,"get_string") s.serve_forever()
客服端
from xmlrpclib import ServerProxy if __name__ == '__main__': s = ServerProxy("http://192.168.137.9:8080") print s.get_string("hello")
結果:
# python get.py
get string :hello
伺服器端:
#coding=utf8 from SimpleXMLRPCServer import SimpleXMLRPCServer from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler class RequestHandler(SimpleXMLRPCRequestHandler): rpc_paths = ('/RPC2',) server = SimpleXMLRPCServer(("0.0.0.0", 8000), requestHandler=RequestHandler) print "start service on 0.0.0.0:8000" server.register_introspection_functions() #註冊pow,冪運算,實際呼叫的是已有的算數pow() server.register_function(pow) def add(x,y): return x + y server.register_function(add, 'add') #注方法在xml-rpc中都是public的 class fun: def div(self, x, y): return x // y server.register_instance(fun()) server.serve_forever()
客服端:
可以使用下面的方法呼叫:
import xmlrpclib s = xmlrpclib.ServerProxy('http://192.168.137.9:8000') print s.pow(3,5) print s.add(3,9) print s.div(7,3) print s.system.listMethods()
結果:
243
12
2
['add', 'div', 'pow', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']
register_multicall_functions實現複合呼叫,多個方法註冊到一個呼叫裡
#coding=utf8 from SimpleXMLRPCServer import SimpleXMLRPCServer server = SimpleXMLRPCServer(("0.0.0.0", 8000)) server.register_function(pow) server.register_function(lambda x,y: x+y, 'add') server.register_multicall_functions() server.serve_forever()
MultiCall呼叫複合方法
import xmlrpclib s = xmlrpclib.ServerProxy("http://192.168.137.9:8000") print s multi = xmlrpclib.MultiCall(s) multi.pow(2, 5) try: for response in multi(): print response except Error, err: print "ERROR", err
結果:
# python jm.py
<ServerProxy for 192.168.137.9:8000/RPC2>
32
RPC
RPC 就是為解決服務之間資訊互動而發明和存在的。
RPC(Remote Procedure Call)——遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協定。
RPC採用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。
首先,客戶機呼叫程序傳送一個有程序引數的呼叫資訊到服務程序,然後等待應答資訊。
在伺服器端,程序保持睡眠狀態直到呼叫資訊到達為止。
當一個呼叫資訊到達,伺服器獲得程序引數,計算結果,傳送答覆資訊
然後等待下一個呼叫資訊,最後,使用者端呼叫程序接收答覆資訊,獲得程序結果,然後呼叫執行繼續進行。
RPC就是一種遠端呼叫函數介面的方式,說白了,就是一種遠端呼叫函數介面的方式,使用者端和伺服器端之間約定一種契約(函數介面),然後伺服器端一直等待使用者端的呼叫。
有點像平常的WEB網路請求。
一種用途是在多臺伺服器之間互相進行呼叫。
另一個用途則在於,不同程式語言之間都支援這種方式,像Python更是內建對其的支援,不需要額外安裝什麼庫,所以可以直接在多語言的伺服器之間互相進行呼叫。
Socket程式設計就是RPC通訊
簡單的伺服器端
像web請求一樣,我們需要確定供使用者端存取的url和埠號,以及供使用者端呼叫的方法實現,最後要讓我們伺服器一直處於等待被存取的狀態:
rpc_server.py from xmlrpc.server import SimpleXMLRPCServer
呼叫函數
def respon_string(str): return 「get string:%s」%str if name == ‘main': server = SimpleXMLRPCServer((‘localhost', 8888)) # 初始化 server.register_function(respon_string, 「get_string」) # 註冊get_string函數 print (「Listening for Client」) server.serve_forever() # 保持等待呼叫狀態 rpc_client.py from xmlrpc.client import ServerProxy if name == ‘main': server = ServerProxy(「http://localhost:8888」) # 初始化伺服器 print (server.get_string(「RPC RPC」)) # 呼叫get_string函數並傳參,呼叫get_string讓伺服器端通過respon_string函數處理請求,並返回。
操作
#伺服器端啟動: [root@xujunk tmp]#python3 rpc_server.py Listening for Client #使用者端啟動: [root@xujunk tmp]#python3 rpc_client.py get string:RPC RPC #返回結果
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45