我希望使用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异常。我有以下疑问:
我错过了一些明显的东西吗?请一些指导。
答案 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()