gpt4 book ai didi

python - 通过 XML-RPC 使用 Python 访问 Ruby 对象?

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:10 25 4
gpt4 key购买 nike

我正在尝试通过 XML-RPC 导出 Ruby 框架。但是,当我尝试从未作为处理程序直接添加到 XML-RPC 服务器的类中调用方法时,我遇到了一些问题。请看下面我的例子:

我有一个测试 Ruby XML-RPC 服务器,如下所示:

require "xmlrpc/server"

class ExampleBar
def bar()
return "hello world!"
end
end

class ExampleFoo
def foo()
return ExampleBar.new
end

def test()
return "test!"
end
end

s = XMLRPC::Server.new( 9090 )

s.add_introspection

s.add_handler( "example", ExampleFoo.new )

s.serve

我有一个测试 Python XML-RPC 客户端,如下所示:

import xmlrpclib

s = xmlrpclib.Server( "http://127.0.0.1:9090/" )

print s.example.foo().bar()

我希望 python 客户端打印“hello world!”因为它等同于以下 ruby​​ 代码:

example = ExampleFoo.new
puts example.foo().bar()

但是它会生成一个错误:“xmlrpclib.ProtocolError: ”。

打印 s.example.test() 工作正常。

我不希望新的 ExampleBar 对象通过网络传输,但我希望它被“缓存”在服务器端,随后对 bar() 的调用将被兑现。

XML-RPC 可以支持这种用法还是太基础了?

所以我想我的问题确实是;如果不使用 XML-RPC,我怎样才能让它工作?

最佳答案

您的客户端(在您的 Python 代码中)是一个 ServerProxy 对象。它只接受 bool 型、整数、 float 、数组、结构、日期或二进制数据类型的返回值。

但是,如果不进行连接,它就无法返回另一个 ServerProxy,而您需要用它来访问另一个类。您可能会在 Ruby 端实现一个对象缓存,但它会涉及跟踪事件 session 并决定何时删除对象、如何处理丢失的对象等。

相反,我建议在 ruby​​ 端暴露一个薄包装器,它执行如下原子操作:

def foobar()
return ExampleFoo.new().foo().bar()
end

关于python - 通过 XML-RPC 使用 Python 访问 Ruby 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com