2011-01-19 22 views
18

¿Alguien puede recomendar un código simple para configurar un servidor JSON RPC simple y un servidor usando twisted?Python Twisted JSON RPC

Encontré txJSON-RPC, pero me preguntaba si alguien tenía alguna experiencia en el uso de algunos de estos y podría recomendar algo.

Respuesta

20

txJSONRPC es genial. Lo uso y funciona. Sugiero que lo pruebes.

SERVIDOR:

from txjsonrpc.web import jsonrpc 
from twisted.web import server 
from twisted.internet import reactor 

class Math(jsonrpc.JSONRPC): 
    """ 
    An example object to be published. 
    """ 
    def jsonrpc_add(self, a, b): 
     """ 
     Return sum of arguments. 
     """ 
     return a + b 

reactor.listenTCP(7080, server.Site(Math())) 
reactor.run() 

CLIENTE:

from twisted.internet import reactor 
from txjsonrpc.web.jsonrpc import Proxy 

def printValue(value): 
    print "Result: %s" % str(value) 

def printError(error): 
    print 'error', error 

def shutDown(data): 
    print "Shutting down reactor..." 
    reactor.stop() 

proxy = Proxy('http://127.0.0.1:7080/') 

d = proxy.callRemote('add', 3, 5) 
d.addCallback(printValue).addErrback(printError).addBoth(shutDown) 
reactor.run() 

Como beneficio adicional, voy a dejar alguna alternativa: amplificador. http://amp-protocol.net

+0

Funcionó bien excepto por dos pequeños cambios. Necesitaba cambiar clase Math (jsonrpc.jsonRPC): a clase Math (jsonrpc.JSONRPC): en el servidor y los puertos falta de coincidencia en el código de cliente y el servidor, haga que ponerse de acuerdo sobre uno y funciona bien – 1337Rooster

+0

Podría ser mejor usar 'd.addCallback (printValue); d.addErrback (printError) 'en lugar de' d.addCallbacks (printValue, printError) 'para detectar errores de' printValue() '. – jfs

+0

@ 1337 Rooster, @ J.F. Sebastian: He solucionado los problemas que ustedes mencionaron para los lectores futuros. Gracias por los comentarios. – nosklo

0

Cyclone, una implementación de servidor web Tornado asíncrono escrito usando retorcida, tiene incorporado un controlador de solicitudes JSON-RPC que utiliza el módulo de Python JSON/simplejson. Ejemplo de código de cliente y servidor es here.

2

Si usted está buscando un enfoque de marco independiente, this lib Empujé (usando mixin) podría ser útil:

0

Wikipedia tiene un montón de implementaciones enumerados para Python: https://en.wikipedia.org/wiki/JSON-RPC#Implementations

Dicho esto, txjason siente como el mejor integrado con retorcido. Parece apoyar las respuestas fuera de orden, por ejemplo. La mayor parte sería portátil para python3 usando seis. La parte más horrible es la validación de parámetros, que de todos modos no está expuesta en la API pública normal.

0

Para mí esto funcionó mejor que "bibliotecas", hablando de cliente.

TESTDATA = {'id': 1234, 
       'method': 'getbalance', 
       } 
    URL = 'http://localhost:7777' 

    d= getPage(URL,method="POST",postdata=json.dumps(TESTDATA)) 
    d.addBoth(lambda x :print(json.loads(x)))