有人能推荐一些简单的代码,使用twisted设置一个简单的JSON RPC客户端和服务器吗?
我找到了txJSON-RPC,但我想知道是否有人有使用其他库的经验并能够推荐一些东西。
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
对我来说,这比“库”更好,特别是在客户端方面。
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)))
维基百科列出了许多Python的实现:https://en.wikipedia.org/wiki/JSON-RPC#Implementations
话虽如此,txjason 觉得它是与 Twisted 最好集成的。它似乎支持开箱即用的无序响应等功能。大部分都可以使用 six 移植到 Python3 上。最可怕的部分是参数验证,但在正常的公共API中并没有暴露。
printValue()
的错误,最好使用d.addCallback(printValue); d.addErrback(printError)
而不是d.addCallbacks(printValue, printError)
。 - jfs