我正在尝试将我的服务器中的spyne(http://spyne.io)与ZeroMQ和MsgPack一起使用。我已经按照示例对服务器端进行了编程,但是找不到任何可以帮助我了解如何对客户端进行编程的示例。

我已经找到了类spyne.client.zeromq.ZeroMQClient,但是我不知道它应该是其构造函数的“app”参数。

先感谢您!

编辑:

(简化的)服务器端代码:

from spyne.application import Application
from spyne.protocol.msgpack import MessagePackRpc
from spyne.server.zeromq import ZeroMQServer
from spyne.service import ServiceBase
from spyne.decorator import srpc
from spyne.model.primitive import Unicode

class RadianteRPC(ServiceBase):
    @srpc(_returns=Unicode)
    def whoiam():
        return "Hello I am Seldon!"

radiante_rpc = Application(
    [RadianteRPC],
    tns="radiante.rpc",
    in_protocol=MessagePackRpc(validator="soft"),
    out_protocol=MessagePackRpc()
)

s = ZeroMQServer(radiante_rpc, "tcp://127.0.0.1:5001")
s.serve_forever()

最佳答案

Spyne的作者在这里。

Spyne的客户端传输存在许多问题。

首先也是最重要的一点是,它们需要服务器代码才能工作。这是因为Spyne的wsdl解析器仅完成了一半,因此无法将服务器公开给客户端的接口(interface)进行通信。

一旦Wsdl解析器完成,Spyne的客户端传输也将恢复。尽管测试通过了,但是它们工作得很好,但是(有些)过时了,并且您注意到,没有合适的文档。

现在回到您的问题:客户端构造函数的app参数与服务器构造函数的应用程序实例相同。因此,如果您这样做:

c = ZeroMQClient("tcp://127.0.0.1:5001", radiante_rpc)
print c.service.whoiam()

它将显示“你好,我是塞尔登!”

这是我刚刚提交的完整代码:https://github.com/arskom/spyne/tree/master/examples/zeromq

:

综上所述,您不应将ZeroMQ用于RPC。

我回想起出于RPC目的的ZeroMQ时,它的炒作达到了疯狂的水平((我甚至在ZeroMQ贡献者列表中都得到了我的名字:))我不喜欢自己所看到的,我继续前进。

在此处粘贴来自https://news.ycombinator.com/item?id=6089252的我相关的news.yc评论:



我似乎已经在一年多以前写了那条评论。时至今日,我在Spyne 2.11中实现并发布了MessagePack传输。因此,如果您正在寻找一种用于内部传递小消息的轻量级传输,我的建议是使用它而不是ZeroMQ。

但是,一旦您离开Http领域,您就回到系统级别的套接字上,这可能是您想要的,也可能不是,这取决于您为此预留的资源量您的项目。

不幸的是,除了我在这里放在一起的示异常(exception),没有关于它的文档:https://github.com/arskom/spyne/tree/master/examples/msgpack_transport

服务器代码是相当标准的Spyne/Twisted代码,但客户端使用系统级套接字来说明其工作方式。我很乐意接受将请求包装到适当的Spyne客户端传输中的请求请求。

我希望这有帮助。欢迎打补丁。

此致,

关于python - 有一个Spyne客户的例子吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25165050/

10-12 20:16