🔥

Тред (Михаил Рахманов)


Ну а теперь, чуть больше о вещах, которыми я занимаюсь. А это всякие вопросы синхронизации между девайсами. Вот в частности был один кейс, когда мы не могли засинкать мобилки между собой. Ниже чуть подробнее про проблему и как мы ее решили.

Чтобы синхронизироваться с девайсом нам нужно знать его адрес (по сути ip + порт), а чтобы узнать адрес есть несколько механизмов, используемых libp2p (основная либа в составе IPFS) - в локальной сети mdns, а вообще - DHT.

Проблема в том, что некоторые девайсы не включаются в DHT (распределенная хеш таблица), если к ним невозможно подсоединиться извне. Чтобы определить, включаем ли мы девайс в DHT или нет, есть специальный механизм.

Как правило, это происходит так - есть специальные ноды, к ним подключается девайс, они видят его адрес, и пытаются открыть обратное соединение по этому адресу. Если обратное соединение не получилось, то ноды уведомляют девайс об этом по первому входящему соединению.

Говоря простым языком, мобильные сети не дают подключиться к девайсу извне, поэтому запоминать адрес девайса бесполезно. Но есть другие механизмы, которые мы использовали, такие как подключение через реле.

Подключение через реле - механизм предусмотренный libp2p как раз для таких случаев. По сути 2 устройства открывают соединения с третьим, а оно, в свою очередь, передает сообщения из одного соединения в другое (docs.libp2p.io/concepts/circu…).

Михаил РахмановМихаил Рахманов