难以理解Majordomo API,pyzmq-mdp的工作原理

时间:2013-10-13 10:54:42

标签: python zeromq pyzmq

我希望使用Majordomo API,pyzmq-mdp。客户端存储库中的example是我不太了解的。

在myclient.py中,该示例在不使用MDPClient API的情况下手动创建套接字。更糟糕的是,mdp_request方法用于发出请求。但到目前为止我试过这个:

class Client(MDPClient):

    def on_timeout(self):
        print "Client Timed out."

def main():
    context = zmq.Context()
    mdp_client = Client(context, "tcp://127.0.0.1:8888", SERVICE)
    try:
        mdp_client.request(["hello"], timeout=5000)
    except RequestTimeout:
        print "Timed Out."


if __name__ == '__main__':
    main()

我只是在经营客户。没有经纪人。但这不会引发RequestTimeout异常。我有以下疑问:

  • 为什么不是实现MDPClient API的示例?
  • 当有可用的请求方法时,mdp_request方法的目的是什么?
  • 我的方法出了什么问题?

我错过了一些明显的东西吗?请一些指导。

1 个答案:

答案 0 :(得分:3)

根据你的问题:

  

当有可用的请求方法时,mdp_request方法的目的是什么?

它写在code

mdp_request是同步的 MDP请求

MDPClient类是zmq.REQ套接字的异步封装,旨在集成到pyzmq的异步IOLoop中。

  

我的做法出了什么问题?

我正在努力解决同样的问题。在检查test_client.py后,我能用这样的例子来解决它:

import zmq
from zmq.eventloop.ioloop import IOLoop
from mdp.client import MDPClient

class MyClient(MDPClient):
    def on_message(self, msg):
        print("Received:", repr(msg))
        IOLoop.instance().stop()
        return

    def on_timeout(self):
        print('TIMEOUT!')
        IOLoop.instance().stop()
        return

if __name__ == '__main__':
    context = zmq.Context()
    client = MyClient(context, 'tcp://127.0.0.1:5555', b'echo')
    client.request(b'Hello world', timeout=3000)
    IOLoop.instance().start()
    client.shutdown()