23 mar. 2008

Ejemplo XML-RPC en python

XML-RPC permite crear un webservice que recibe unos parámetros y devuelve un resultado. Es como una función pero los datos viajan a través de la red.

El ejemplo es un webservice que recibe un valor y devuelve el doble de ese valor. Algo sencillo.

El servidor.


#Se importa el módulo XMLRPC
from SimpleXMLRPCServer import SimpleXMLRPCServer
#Se asocia a un puerto en este caso 4242
s = SimpleXMLRPCServer(("", 4242))
#La función que toma x y devuelve el doble de x.
def twice(x):
return x*2
#se registra la función
s.register_function(twice)
#se inicia el servidor
s.serve_forever()



El cliente


#Se importa el módulo ServerProxy de xmlrpclib.
from xmlrpclib import ServerProxy
#Se conecta al equipo por el puerto 4242
s = ServerProxy('http://localhost:4242')
#Se llama a la función pasandole x y devuelve el doble de x
s.twice(2)
4
s.twice(3)
6
s.twice(15)
30



En el servidor se muestra los siguientes mensajes:
localhost - - [24/Mar/2008 00:13:38] "POST /RPC2 HTTP/1.0" 200 -
localhost - - [24/Mar/2008 00:14:23] "POST /RPC2 HTTP/1.0" 200 -
localhost - - [24/Mar/2008 00:14:36] "POST /RPC2 HTTP/1.0" 200 -

Son las respuestas a la conexiones del cliente.
Este programa se puede mejorar evaluando el tipo de datos que envia el cliente para así evitar errores al mandar un string en vez de un número.

3 comentarios:

JP dijo...

Hola Ernesto.

¿Qué servidor utilizaste para correr los ejemplos que publicaste?

ernesto dijo...

Hola JP. Eso fue hace mucho si ves la conexión fue el 24 de Marzo del 2008. Por lo que veo en el post use un equipo Debian estable de esa época. Ejecute el servidor y el cliente en el mismo equipo.

ernesto dijo...

hola quisiera saber tu opinion acerca de que libreria usar para manipular desde una pagina web de django un programa de python, si es mejor manipularlo mediante señales o de esta manera con xmlrpc, cual es mas seguro y optimo para ti
gracias