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 адреса.