【问题标题】:Identifying the origin of ZMQ messages?识别 ZMQ 消息的来源?
【发布时间】:2014-03-03 07:19:49
【问题描述】:

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

data = s.recv()

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

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

或者这只是一个坏主意?

【问题讨论】:

标签: python zeromq pyzmq


【解决方案1】:

不,您无法从 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);

【讨论】:

    【解决方案2】:

    【讨论】:

    • 有趣。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多