2011-01-19 30 views
18

Có ai có thể giới thiệu một số mã đơn giản để thiết lập một máy khách và máy chủ RPC JSON đơn giản bằng cách sử dụng xoắn không?Python Xoắn JSON RPC

Tôi đã tìm thấy txJSON-RPC, nhưng tôi đã tự hỏi liệu có ai đó có một số kinh nghiệm sử dụng một số anc này có thể đề xuất điều gì đó không.

Trả lời

20

txJSONRPC thật tuyệt. Tôi sử dụng nó và nó hoạt động. Tôi đề nghị bạn thử.

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

KHÁCH HÀNG:

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

Như một phần thưởng, tôi sẽ để lại một số lựa chọn: amp. http://amp-protocol.net

+0

Làm việc tốt ngoại trừ hai thay đổi nhỏ. Tôi cần phải thay đổi lớp Math (jsonrpc.jsonRPC): để lớp Math (jsonrpc.JSONRPC): trong máy chủ và các cổng không phù hợp trong client và server mã, họ đã đồng ý về một và nó hoạt động fine – 1337Rooster

+0

Nó có thể là tốt hơn để sử dụng 'd.addCallback (printValue); d.addErrback (printError) 'thay vì' d.addCallbacks (printValue, printError) 'để bắt lỗi từ' printValue() '. – jfs

+0

@ 1337Rooster, @ J.F. Sebastian: Tôi đã sửa các vấn đề mà các bạn đã đề cập đến cho các độc giả trong tương lai. Cảm ơn các ý kiến. – nosklo

0

Cyclone, một Tornado async thực hiện máy chủ web được viết bằng xoắn, có một built-in JSON-RPC yêu cầu xử lý có sử dụng các mô-đun python json/simplejson. Mã máy khách và máy khách mẫu là here.

2

Nếu bạn đang tìm kiếm một cách tiếp cận khung độc lập, this lib Tôi đẩy (sử dụng mixin) có thể hữu ích:

0

wikipedia có một loạt các triển khai niêm yết cho python: https://en.wikipedia.org/wiki/JSON-RPC#Implementations

Điều đó nói rằng, txjason cảm thấy giống như một trong những tốt nhất tích hợp với xoắn. Dường như để hỗ trợ ra khỏi phản ứng đặt hàng ra khỏi hộp ví dụ. Hầu hết nó sẽ được di chuyển đến python3 bằng cách sử dụng sáu. Phần khủng khiếp nhất là xác thực tham số, không được hiển thị trong API công khai thông thường.

0

Đối với tôi, điều này làm việc tốt hơn thì "thư viện", nói về khách hàng.

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