python – 识别ZMQ消息的来源?

如果我通过ZeroMQ(0MQ)套接字上的recv()方法收到消息…

data = s.recv()

…有没有办法让我获得底层套接字的getpeername()值?我的目标是以不依赖发件人提供准确信息的方式识别邮件的来源.

我正在使用ZMQ(通过Python)来收集主机指标,从接收者的角度来看发送者的地址是一个有用的标识符.

或者这只是一个坏主意?

解决方法:

不,您无法从ZeroMq获取发件人的地址.你基本上有两个选择;将发件人地址信息添加到邮件本身(如果允许修改现有邮件结构,则不是错误选项)或将发件人地址添加为邮件部分,即使用ZeroMq多部分邮件.

多部分消息仍将作为一个整体传递(所有部分或根本不传递),但您可以在接收端单独提取部分,因此您可以将发件人地址附加或添加到任何现有消息,而无需实际触摸它们(并且仍将两个地址消息都作为原子操作传递).

我不确定这是如何在pyzmq绑定中实现的,但请查看socket.pyx source以获取详细信息(基本上,在send(..)方法中使用SNDMORE标志).

另外,看看ZeroMq zmq_send() Api文档(3.2.2).

在C中,它看起来像这样:

// Send a multi-part message consisting of sender IP plus another message
zmq_msg_send (&my_ip, my_socket, ZMQ_SNDMORE);
zmq_msg_send (&my_message, my_socket, 0);
上一篇:python – zero-mq:socket.recv()调用阻塞


下一篇:c# – 尝试使用ZeroMQ构建分布式爬虫