Питон витая в JSON RPC в

может ли кто-нибудь порекомендовать простой код для настройки простого клиента JSON RPC и сервера с помощью twisted?

Я нашел txJSON-RPC, но мне было интересно, есть ли у кого-то опыт использования некоторых из этих anc может что-то порекомендовать.

5 ответов


txJSONRPC отлично. Я использую его, и он работает. Я предлагаю вам попробовать.

сервер:

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()

клиент:

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()

в качестве бонуса я оставлю некоторую альтернативу: amp. http://amp-protocol.net


Если вы ищете фреймворк-независимый подход,это lib Я нажал (используя mixin), может быть полезно:


циклон, a Торнадо реализация асинхронного веб-сервера, написанная с помощью twisted, имеет встроенный обработчик запросов json-rpc, который использует модуль python json/simplejson. Пример кода сервера и клиента -здесь.


Википедия имеет кучу реализаций, перечисленных для python:https://en.wikipedia.org/wiki/JSON-RPC#Implementations

Что сказал:txjason чувствует как одно самое лучшее интегрированное с переплетенным. Кажется, что он поддерживает ответы из коробки, например. Большая часть его будет переноситься на python3 с помощью шести. Самая ужасная часть-это проверка параметров, которая в любом случае не отображается в обычном общедоступном API.


для меня это сработало лучше, чем "библиотеки" , говоря о клиенте.

    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)))