Post
Topic
Board Идеи
Re: Одноранговая сеть на базе WebRTC
by
kzv
on 23/12/2019, 16:39:02 UTC
WebRTC на данный момент не совсем жив.

Вообще же есть проект PeerJS, который серьезно облегчает реализацию сервера и клиента:

https://peerjs.com/

Описанная же проблема общая для всех P2P сетей, включая биткойн, нодам которого для начального обмена пирами тоже приходится полагаться на централизованный dns seed. Увы, любой P2P сети нужно с чего-то начинаться, если хочется чтобы она была массовой. В противном случае, будет как с CJDNS - идеальная децентрализация при почти полном отсутствии потребителей.

Да, разработчики на WebRTC как-то не обращают внимания, хотя на мой взгляд незаслуженно.
Библиотек есть куча, мне больше нравится simple-peer. Суть в том, что нужно провести что-то типа научного исследования... То есть сейчас мне не понятно в принципе: реализуема ли идея или нет?

Да, все клиенты любой p2p сети, при первом запуске должны подключиться к заранее известным нодам-сидерам. В биткоине часть сидеров зашита прямо в исходник, часть ищется через dns seed. В некоторых p2p клиентах список пиров достается тупо из текстового файла... Во многих говнофорках начальный список сидеров задается в ветке с анонсом ))

Теперь про WebRTC.
Чтобы установить соединение, два пира должны обменяться сигнальными данными: один пир генерирует сигнал который называется offer - это тупой набор тектовых данных, другой пир получает этот текст и на его основе генерирует сигнал answer - тоже текст который надо послать обратно первому пиру.
Когда пиры обменялись этими текстовыми данными, происходит магия: соединение считается установленным, пиры получают возможность обмениваться данными, даже если между ними 100500 роутеров и ип адреса у этих пиров что-то типа 192.168.1.1 или 127.0.0.1

Так вот, сейчас я пока не могу понять: что происходит при разрыве соединения? Офферы и ансверы протухают и надо генерировать новые? Или можно например запомнить оффер, выключить комп, потом сгенерировать новый ансвер на основе старого оффера, отправить партнеру новый ансвер и опять соединиться получается со старым оффером, но с новым ансвером?

А может вообще можно запомнить офферы и ансверы при разрыве соединения и потом использовать эту сигнальную информацию повторно для нового соединения? Это было бы вообще прикольно. Тогда точно можно сделать одноранговую p2p сеть, запоминая офферы и ансверы где-нибудь в localStorage и используя эту информацию так, как обычные p2p сети используют IP адреса.