블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
XML-RPC란?
XML-RPC
는 XML로 인코딩을 하는 RPC(Remote Procedure Call)
프로토콜의 종류 중 하나로, Server
와 Client
가 통신할때 사용한다. 이때, HTTP
프로토콜로 통신한다.
XML-RPC를 사용하면, client에서 server의 프로그램을 마치 로컬에 있는 프로그램을 사용하듯이 원격 실행이 가능하다.
이후에는 좀 더 부가기능을 추가하여 SOAP 프로토콜이 개발되었지만, 단순하고 사용하기 쉬운 XML-RPC를 더 많이 사용하고 있다. (비슷한 프로토콜로는 JSON-RPC가 존재)
XML-RPC XML 예시
XML-RPC Call
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>40</i4></value>
</param>
</params>
</methodCall>
XML-RPC Response
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><string>South Dakota</string></value>
</param>
</params>
</methodResponse>
REST API vs XML-RPC
하지만, 요즘은 XML-RPC를 사용하지 않고 REST API
를 많이 사용한다.
- REST API가 상대적으로 사용하기 쉬움
- XML-RPC는 대량의 데이터 전송에 상대적으로 효율적이지 못함
Python으로 XML-RPC 서버 구축
Server
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ("/RPC2",)
if __name__ == "__main__":
with SimpleXMLRPCServer(('localhost', 8000), requestHandler=RequestHandler) as server:
server.register_introspection_functions()
# 1. pow 함수를 저장하는 경우
server.register_function(pow)
# 2. 사용자가 정의한 함수를 저장하는 경우
def adder_function(x, y):
return x + y
server.register_function(adder_function, 'add')
# 3. 사용자가 정의한 클래스를 인스턴스로 생성하여 저장하는 경우
class MyFuncs:
def mul(self, x, y):
return x + y
server.register_instance(MyFuncs())
# 서버 실행
print("Start server...")
server.serve_forever()
Client
Client쪽에는 pow, add, mul 메소드가 없지만, 실행 할 수 있다.
import xmlrpc.client
if __name__ == "__main__":
proxy = xmlrpc.client.ServerProxy("http://localhost:8000")
# 따로 pow, add, mul 함수를 정의한적이 없지만 사용이 가능하다.
print(proxy.pow(2, 3))
print(proxy.add(2, 3))
print(proxy.mul(5, 2))
# 사용할 수 있는 메소드 확인
print(proxy.system.listMethods())
결과
Reference
반응형
'Language > Python' 카테고리의 다른 글
파이썬(Python)의 특징 정리 (0) | 2021.01.14 |
---|---|
Python 문자와 문자열 다루기 (0) | 2020.11.26 |
Python 사칙연산을 통한 실수형 데이터 다루기 (+, -, *, **, /, //) (0) | 2020.11.26 |
Windows에 Python 3.7.9 설치하기 (0) | 2020.11.26 |
MacOS에 Python 3.7.9 버전으로 설치하기 (0) | 2020.11.26 |