【问题标题】:Python Twisted JSON RPCPython Twisted JSON RPC
【发布时间】:2011-06-11 21:54:34
【问题描述】:

谁能推荐一些简单的代码来使用twisted设置一个简单的JSON RPC客户端和服务器?

我找到了 txJSON-RPC,但我想知道是否有人有使用其中一些 anc 的经验可以推荐一些东西。

【问题讨论】:

    标签: python twisted rpc json-rpc


    【解决方案1】:

    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

    【讨论】:

    • 工作正常,除了两个小改动。我需要将 class Math(jsonrpc.jsonRPC): 更改为 class Math(jsonrpc.JSONRPC): in the server 并且客户端和服务器代码中的端口不匹配,让他们同意一个并且它工作正常
    • 最好使用d.addCallback(printValue); d.addErrback(printError) 而不是d.addCallbacks(printValue, printError) 来捕获来自printValue() 的错误。
    • @1337Rooster, @J.F. Sebastian:我已经为未来的读者解决了你们提到的问题。感谢 cmets。
    • 如何向请求中添加额外的标头,例如 csrf 令牌?例如,Transmission 的 rpc 服务器要求将 X-Transmission-Session-Id 附加到请求标头中。
    • txjsonrpc 还不支持 JSON-RPC 2.0。我花了一段时间才弄清楚。
    【解决方案2】:

    如果您正在寻找一种独立于框架的方法,this lib 我推送(使用 mixin)可能会有所帮助:

    【讨论】:

      【解决方案3】:

      Cyclone,一个使用twisted 编写的Tornado 异步Web 服务器实现,具有使用python json/simplejson 模块的内置json-rpc 请求处理程序。示例服务器和客户端代码是here

      【讨论】:

        【解决方案4】:

        wikipedia 列出了一系列用于 python 的实现:https://en.wikipedia.org/wiki/JSON-RPC#Implementations

        也就是说,txjason 感觉是与twisted 结合得最好的一个。例如,它似乎支持开箱即用的乱序响应。其中大部分将使用六个移植到 python3。最可怕的部分是参数验证,反正在普通的公共 API 中是不会暴露的。

        【讨论】:

          【解决方案5】:

          对我来说,这比“图书馆”更好,说到客户。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-24
            • 1970-01-01
            • 1970-01-01
            • 2013-09-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多