Как один актер получает 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. Это означает, что это может измениться, так что имейте это в виду.

Другие вопросы по тегам