2017-03-22 45 views
1

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

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

然后B向组发送一个消息,A可以接收并操作。 现在,A想知道每个从B收到的消息的B的IP。有没有什么办法可以实现这个功能?

我找到了一个与https://github.com/actor-framework/actor-framework/issues/419类似的答案。但我不确定这对于小组来说也是适当的。

回答

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的一部分。这意味着它很可能会改变,所以记住这一点。

+0

感谢您的回答。另外,组中的一个演员是否可以通过组管理器获取同一组中另一个演员的IP? –

+0

由于组模块意味着松耦合,因此无法检索组的成员。例如,在以UDP多播方式实现组时,首先无法获得成员资格。 – neverlord

+0

感谢您的解释。我将通过其他方式实现此功能,例如消息。 –

相关问题