Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

XML-RPC Server và Client trong Python

Mô tả

XML-RPC là giao thức gọi thủ tục từ xa (Remote Procedure Call) sử dụng XML qua HTTP. Python hỗ trợ sẵn trong thư viện chuẩn: xmlrpc.server và xmlrpc.client.

1. Tạo XML-RPC Server

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler

# Chỉ cho phép path /RPC2
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

with SimpleXMLRPCServer(('localhost', 9000), requestHandler=RequestHandler) as server:
    # Đăng ký hàm introspection (system.listMethods, etc.)
    server.register_introspection_functions()
    
    # Đăng ký hàm built-in len()
    server.register_function(len)
    
    # Đăng ký hàm tùy chỉnh với tên khác
    @server.register_function(name='rmndr')
    def remainder_function(x, y):
        return x // y
    
    # Đăng ký hàm với tên gốc
    @server.register_function
    def modl(x, y):
        return x % y
    
    print("Server đang chạy tại https://localhost:9000/RPC2")
    print("Nhấn Ctrl+C để dừng")
    server.serve_forever()

2. Tạo XML-RPC Client

import xmlrpc.client

# Kết nối đến server
proxy = xmlrpc.client.ServerProxy('https://localhost:9000/RPC2')

# Gọi các hàm đã đăng ký
print("len('Tutorialspoint'):", proxy.len("Tutorialspoint"))  # 14
print("rmndr(12, 5):", proxy.rmndr(12, 5))                    # 2
print("modl(7, 3):", proxy.modl(7, 3))                        # 1

# Liệt kê tất cả method có sẵn
print("\nAvailable methods:")
print(proxy.system.listMethods())

Đầu ra Client

len('Tutorialspoint'): 14
rmndr(12, 5): 2
modl(7, 3): 1

Available methods:
['len', 'modl', 'rmndr', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']

3. Chạy thử nghiệm

  1. Mở terminal 1: chạy server python server.py
  2. Mở terminal 2: chạy client python client.py

Lưu ý bảo mật

  • XML-RPC không có authentication/encryption built-in.
  • Chỉ dùng trong mạng nội bộ tin cậy.
  • Production: dùng HTTPS, VPN, hoặc thay bằng gRPC/REST API.

Mở rộng: Multi-threaded Server

from xmlrpc.server import SimpleXMLRPCServer
import threading

server = SimpleXMLRPCServer(('localhost', 9000), allow_none=True)
# ... register functions ...

# Chạy trong thread riêng
thread = threading.Thread(target=server.serve_forever)
thread.daemon = True
thread.start()

# Main thread làm việc khác...
# server.shutdown() để dừng