一个演员如何在一个组内获得远程演员ip?

时间:2017-03-22 13:44:12

标签: ip actor c++-actor-framework

一个演员如何在一个组内获得远程演员ip?

例如,我有两个演员A和B,他们都加入了一个小组聊天室。 A和B是在不同的机器上产生的。

然后B给团队发送一个消息,A可以接收并采取行动。 现在A想知道B收到的每条消息的B的IP。有没有办法实现这个功能?

我从https://github.com/actor-framework/actor-framework/issues/419找到了一个类似的答案。但我不确定这对团体来说也是合适的。

1 个答案:

答案 0 :(得分:1)

收到邮件后,您可以致电self->current_sender()获取发件人的句柄。然后你可以从这个句柄中获取node_id,如果它与你自己的node_id不同,请向中间人询问连接细节。

auto sender = self->current_sender();
if (!sender)
  return; // anonymous message
auto x = sender->node();
if (x == self->node())
  return; // not a remote actor
auto mm = system.middleman().actor_handle();
self()->request(mm, get_atom::value, x).receive(
  [&](const node_id& nid, const std::string& addr, uint16_t port) {
    assert(nid == x);
    cout << "address: " << addr << ", port = " << port << endl;
  }
);

但是,这不是稳定API的一部分。这意味着它可能会改变,所以请记住这一点。