最近在用XML-RPC實現server與client之間的互動,底下是簡單的訊息互傳範例:
Server端
#Python 2
#import SimpleXMLRPCServer
#Python 3
import xmlrpc.server
host = "127.0.0.1"
port = 1234
def handle(msg):
#Python 2
#print "Handle message: " + msg
#Python 3
print("Handle message: " + msg)
ret = "Hello! I have received your message."
return ret
def main():
#Python 2
#server = SimpleXMLRPCServer.SimpleXMLRPCServer((host, port))
#Python 3
server = xmlrpc.server.SimpleXMLRPCServer((host, port))
server.register_function(handle)
server.serve_forever()
if __name__ == "__main__":
main()
Client端
#Python 2
#import xmlrpclib
#Python 3
import xmlrpc.client
host = "http://127.0.0.1:1234"
def main():
#Python 2
#server = xmlrpclib.ServerProxy(hots)
#Python 3
server = xmlrpc.client.ServerProxy(host)
result = server.handle("Welcome.")
#Python 2
#print result
#Python 3
print(result)
if __name__ == "__main__":
main()
有一些地方要注意:
- Python 2和Python 3的xmlrpc library不同,範例裡有用註解表示Python 2的寫法。
- Python 2和Python 3的print也不同。
- SimpleXMLRPCServer()的參數是tuple型態,host要給字串,port要給整數。
- server的host設定為127.0.0.1,client就只能連線到127.0.0.1;換句話說,server的host若設定成192.168.1.1,client即使在本機,也不能透過127.0.0.1連線,只能連線到192.168.1.1。
- client端呼叫一次server端的handle(),socket連線即結束;要再次呼叫的話,要再執行一次ServerProxy()。
- server端可以一次註冊多個function。
- serve_forever()要放在最後面呼叫,因為呼叫完即進入server的main routine。
沒有留言:
張貼留言