Sencilla aplicación cliente/servidor utilizando SimpleXMLRPCServer

Con la libreria SimpleXMLRPCServer que Python nos ofrece podemos crear de forma sencilla una aplicación cliente-servidor que se comunique a través del protocolo RPC, en concreto XML-RPC. Lo que vamos a hacer es crear un servidor que contenga una función la cual va a ejecutarse bajo petición de la aplicación cliente, al final de esta función devolveremos una variable cuyo valor será  el que reciba nuestro cliente.

Por un lado tenemos el servidor, servidor.py

from SimpleXMLRPCServer import SimpleXMLRPCServer
import os
import sys
import subprocess
import string

#Creamos el servidor indicando que utilizaremos el puerto 5123
serv = SimpleXMLRPCServer(("",5123))

#Creamos una función que realice la tarea deseada
def datos():
    outp = subprocess.Popen(["./mppt"], stdout=subprocess.PIPE).communicate()[0]
    fuera = string.split(outp,"\n")
    return fuera

#Registramos la función
serv.register_function(datos)

#Iniciamos el servidor
serv.serve_forever()

Y por otra parte el cliente, cliente.py

from xmlrpclib import ServerProxy
import os
#Indicamos cual es el servidor con el que nos comunicaremos
serv= ServerProxy('http://localhost:5123')
#Llamamos a la funcion datos() del servidor y lo imprimimos por pantalla
print serv.datos()

Al ejecutar el código que hemos escrito obtendremos algo como esto en la parte servidor.

$ python servidor.py localhost.localdomain - - [21/Sep/2011 00:50:07] "POST /RPC2 HTTP/1.0" 200 -

El cliente recibe lo que nos devuelve la función y la imprime, en este caso la función datos() nos devuelve un array.

$ python cliente.py ['35136.000', ' 15489.000', ' 32767.000', ' 0.000', ' 7626.000', ' 5064.000', ' 11036.000', ' 0.000', ' 38184.000', ' 5098.000', ' 11036.000', ' 0.000', ' 35088.000', ' 15489.000', ' 32767.000']

El resultado no tenemos por que mostrarlo por pantalla podemos tratarlo como cualquier otra variable de python. En concreto XML-RPC soporta los siguientes tipos:

  • base64 (Datos binarios codificados en base 64)
  • boolean
  • date (yyyymmddThh:mm:ss)
  • float
  • int
  • string
  • struct

Si estás pensando programar una aplicación móvil  puedes aprovechar la parte del servidor que hemos visto y utilizar por ejemplo android-xmlrpc en la parte cliente. Espero que os sea útil.

Categories

Development

Tags

python
comments powered by Disqus