2011-01-19 5 views
18

누군가 간단한 코드를 사용하여 간단한 JSON RPC 클라이언트와 서버를 트위스트 방식으로 설정할 수 있습니까?Python Twisted JSON RPC

txJSON-RPC가 발견되었지만, 누군가이 anc 중 일부를 사용하여 경험이 있다면 궁금합니다.

답변

20

txJSONRPC는 훌륭합니다. 나는 그것을 사용하고 그것을 작동합니다. 나는 당신이 그것을 시험해 볼 것을 제안한다.

SERVER :

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

CLIENT : 보너스로

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

, 나는 몇 가지 대안을 떠날 것이다 : A. http://amp-protocol.net

+0

두 가지 사소한 변경을 제외하고는 정상적으로 작동합니다. 그 하나에 동의 한 및 포트가 클라이언트와 서버 코드 불일치 서버에서 와 그것을 작동 : 클래스 수학 (jsonrpc.JSONRPC)에 : 나는 클래스 수학 (jsonrpc.jsonRPC)를 변경하는 데 필요한 fine – 1337Rooster

+0

'd.addCallback (printValue);를 사용하는 것이 더 나을지도 모른다. d.addCallbacks (printValue, printError)'대신'd.addErrback (printError)'를 사용하여'printValue()'에서 에러를 잡아 낸다. – jfs

+0

@ 1337Rooster, @ J.F. Sebastian : 나는 미래 독자들을 위해 언급 한 문제를 해결했습니다. 의견에 감사드립니다. – nosklo

2

당신이 프레임 워크에 독립적 인 방법을 찾고 있다면, this lib 내가 도움이 될 수 있습니다 (믹스 인을 사용하여) 추진 최고의 꼬인 것과 같은 것. 예를 들어 아웃 오브 더 박스 (out of box) 응답을 지원하는 것으로 보인다. 대부분은 6을 사용하여 python3에 이식 가능합니다. 가장 끔찍한 부분은 매개 변수 유효성 검사로, 일반 공용 API에서는 공개되지 않습니다.

0

위키 피 디아는 파이썬에 대해 나열된 구현의 무리가 있습니다

0

클라이언트의 경우 "라이브러리"가 좋았습니다.

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