Tuesday, January 15, 2008
XML-RPC แบบง่ายๆ กับ python
XML-RPC เป็น Remote Procedure Call ประเภทนึงที่ใช้ XML เป็นสื่อกลางในการส่งข้อมูลผ่านตัวแปร HTTP
Python สามารถทำงานกับ XML-RPC ได้ทั้งเป็น XML-RPC Server หรือเป็น XML-RPC Proxy
พูดง่ายๆ ก็คือเราเรียกใช้ Class หรือ Function ที่อยู่บน Server ได้โดยที่ไม่ต้องเขียน Network Server เอง
Module หลักๆ ที่จะใช้ก็คือ SimpleXMLRPCServer กับ xmlrpclib
การใช้งาน server แบบง่ายๆ ก็คือ
# ตัวอย่าง class ที่อยู่บน Server
ต่อไปเราก็สร้าง XML-RPC Server
# server bind เข้ากับทุก interface ที่ port 12345
address = ('0.0.0.0',12345)
server = SimpleXMLRPCServer.SimpleXMLRPCServer(address)
# สร้าง class object มา
classobj = xmlrpcsample()
# register ตัว class เข้ากับ XML-RPC server
server. register_instance(classobj)
# เริ่มทำงานได้
server.serve_forever()
เป็นอันว่าจบในส่วนของ Server ต่อไป Client จะเรียกใช้งาน Class นี่ที่อยู่บน server ก็ใช้งานง่าย
เป็นอันจบ
ข้อควรระวัง function ต้อง return ค่าทุกครั้ง ถ้าไม่ return ค่า จะต้อง set allow_none=True ตอนที่เรียก ServerProxy
Python สามารถทำงานกับ XML-RPC ได้ทั้งเป็น XML-RPC Server หรือเป็น XML-RPC Proxy
พูดง่ายๆ ก็คือเราเรียกใช้ Class หรือ Function ที่อยู่บน Server ได้โดยที่ไม่ต้องเขียน Network Server เอง
Module หลักๆ ที่จะใช้ก็คือ SimpleXMLRPCServer กับ xmlrpclib
การใช้งาน server แบบง่ายๆ ก็คือ
# ตัวอย่าง class ที่อยู่บน Server
class xmlrpcsample:
def printme(textmesg):
return textmesg.upper()
ต่อไปเราก็สร้าง XML-RPC Server
# server bind เข้ากับทุก interface ที่ port 12345
address = ('0.0.0.0',12345)
server = SimpleXMLRPCServer.SimpleXMLRPCServer(address)
# สร้าง class object มา
classobj = xmlrpcsample()
# register ตัว class เข้ากับ XML-RPC server
server. register_instance(classobj)
# เริ่มทำงานได้
server.serve_forever()
เป็นอันว่าจบในส่วนของ Server ต่อไป Client จะเรียกใช้งาน Class นี่ที่อยู่บน server ก็ใช้งานง่าย
import xmlrpclib
server = xmlrpclib.ServerProxy("http://127.0.0.1:12345")
server.printme('helloworld')
เป็นอันจบ
ข้อควรระวัง function ต้อง return ค่าทุกครั้ง ถ้าไม่ return ค่า จะต้อง set allow_none=True ตอนที่เรียก ServerProxy
Subscribe to Comments [Atom]