2017-03-22 44 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

感謝您的解釋。我將通過其他方式實現此功能,例如消息。 –

相關問題