Как один актер получает IP удаленного актера в одной группе?
Как один актер получает IP удаленного актера в одной группе?
Например, у меня есть два актера A и B, которые оба присоединились к одному групповому чату. А и Б были созданы на разных машинах.
Затем B отправляет одно сообщение группе, и A может получать и действовать. Теперь A хочет знать IP B для каждого полученного сообщения от B. Есть ли способ улучшить эту функцию?
Я нашел один подобный ответ от 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. Это означает, что это может измениться, так что имейте это в виду.