python-难以理解Majordomo API,pyzmq-mdp的工作方式

我希望使用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方法的目的是什么?
>我的方法有什么问题?

我是否缺少明显的东西?请一些指导.

解决方法:

根据您的问题:

What is the purpose of mdp_request method when there is a request method available?

code所示:

mdp_request是同步MDP请求

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

What is wrong with my approach?

我在同一个问题上挣扎.检查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()
上一篇:HDU - 1164


下一篇:CentOS 6.5 64位下安装MySQL 5.7.11