Author

Topic: Одноранговая сеть на базе WebRTC (Read 523 times)

sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?

Нет, не так же. Любое полноценное p2p приложение открывает порт при запуске, держит его открытым и отвечает на запросы независимо от фокуса пользователя, а браузер так не умеет. Ты открыл вкладку, в ней запустилось твоё приложение, открылись порты. Если вкладку закрыть, то приложение и порты закроются,
То есть вкладке это и есть аналог приложения. Есть вкладка(приложение) - есть порты, нет вкладки(приложения) - нет портов.

Только на уровне браузера со всеми вытекающими зависимостями и ограничениями, на уровне ОС твоего приложения не существует.

даже если её не закрывать, а открыть другую, вкладка с твоим приложением уснёт и перестанет отвечать на внешние запросы.

А вот этого я не знал.
Если так, тогда надо предупреждать пользователей просто, что открывать приложение надо в отдельном окне, а не во вкладке.

Это костыль и не факт что поможет. Деление на окна и вкладки весьма условное - браузер из родительского процесса замедляет или вовсе приостанавливает всё что не в фокусе пользователя.
member
Activity: 126
Merit: 23
Или просто восстанавливать состояние из базы кеша браузера.
Думаю все не так просто. Браузер открывает порты по своему усмотрению. Заставить его открыть определенный порт - невозможно.
Поэтому если он в одной сессии открыл 10 портов: 1,2,3,4,5...10, то в другой сессии он уже откроет другие порты и ничего с этим нельзя сделать.

Угу. Повторный опрос сигнальных серверов, переконнект всей сетки со всеми NAT и прочими замутами.
Поэтому когда я делал мессенджер на вебртс, я плюнул на все и сделал таки на амазоновском IoT.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Или просто восстанавливать состояние из базы кеша браузера.

Думаю все не так просто.
Браузер открывает порты по своему усмотрению. Заставить его открыть определенный порт - невозможно.
Поэтому если он в одной сессии открыл 10 портов: 1,2,3,4,5...10, то в другой сессии он уже откроет другие порты и ничего с этим нельзя сделать.
member
Activity: 126
Merit: 23

Нет, не так же. Любое полноценное p2p приложение открывает порт при запуске, держит его открытым и отвечает на запросы независимо от фокуса пользователя, а браузер так не умеет. Ты открыл вкладку, в ней запустилось твоё приложение, открылись порты. Если вкладку закрыть, то приложение и порты закроются,
То есть вкладке это и есть аналог приложения. Есть вкладка(приложение) - есть порты, нет вкладки(приложения) - нет портов.

даже если её не закрывать, а открыть другую, вкладка с твоим приложением уснёт и перестанет отвечать на внешние запросы.

А вот этого я не знал.
Если так, тогда надо предупреждать пользователей просто, что открывать приложение надо в отдельном окне, а не во вкладке.
Или просто восстанавливать состояние из базы кеша браузера.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Нет, не так же. Любое полноценное p2p приложение открывает порт при запуске, держит его открытым и отвечает на запросы независимо от фокуса пользователя, а браузер так не умеет. Ты открыл вкладку, в ней запустилось твоё приложение, открылись порты. Если вкладку закрыть, то приложение и порты закроются,
То есть вкладке это и есть аналог приложения. Есть вкладка(приложение) - есть порты, нет вкладки(приложения) - нет портов.

даже если её не закрывать, а открыть другую, вкладка с твоим приложением уснёт и перестанет отвечать на внешние запросы.

А вот этого я не знал.
Если так, тогда надо предупреждать пользователей просто, что открывать приложение надо в отдельном окне, а не во вкладке.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Умеет, но только по запросу своего пользователя.

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

В случае WebRTC порт открывается каждый раз новый и поэтому необходима более сложная система сигнализации.

То есть можно открыть заранее 100 портов и послать через сигнальный сервер информацию об этих открытых портах всем остальным нодам.
Другие ноды могут хранить эту информацию в кэше и передавать другим нодам через уже открытые соединения, в обход сигнального сервера.


Нет, не так же. Любое полноценное p2p приложение открывает порт при запуске, держит его открытым и отвечает на запросы независимо от фокуса пользователя, а браузер так не умеет. Ты открыл вкладку, в ней запустилось твоё приложение, открылись порты. Если вкладку закрыть, то приложение и порты закроются, даже если её не закрывать, а открыть другую, вкладка с твоим приложением уснёт и перестанет отвечать на внешние запросы.

Что значит открыть заранее?
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Умеет, но только по запросу своего пользователя.

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

В случае WebRTC порт открывается каждый раз новый и поэтому необходима более сложная система сигнализации.

То есть можно открыть заранее 100 портов и послать через сигнальный сервер информацию об этих открытых портах всем остальным нодам.
Другие ноды могут хранить эту информацию в кэше и передавать другим нодам через уже открытые соединения, в обход сигнального сервера.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
В одноранговой сети не должно быть выделенных серверов.

Потому её клиенты и должны выполнять роль сервера, а они не умеют в данном случае.

Браузер умеет открывать порт, умеет получать на этот порт данные, умеет отправлять данные. Этого достаточно для построения одноранговой сети.

Умеет, но только по запросу своего пользователя.
sr. member
Activity: 1337
Merit: 288
0xbt
Я уже приводил ссылку, приведу еще раз https://www.npmjs.com/package/simple-peer

Да, это действительно работает.
Сделал, кому интересно для тестов:
http://ts.0xbt.net/sp/index.html
Причем работает и в Base64:
Code:
data:text/html;base64,PGh0bWw+CiAgPGJvZHk+CiAgICA8c3R5bGU+CiAgICAgICNvdXRnb2luZyB7CiAgICAgICAgd2lkdGg6IDYwMHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICB9CiAgICA8L3N0eWxlPiAKICAgIDxmb3JtPgogICAgICA8dGV4dGFyZWEgaWQ9ImluY29taW5nIj48L3RleHRhcmVhPgogICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCI+c3VibWl0PC9idXR0b24+CiAgICA8L2Zvcm0+CiAgICA8cHJlIGlkPSJvdXRnb2luZyI+PC9wcmU+CiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL3RzLjB4YnQubmV0L3NwL3NpbXBsZXBlZXIubWluLmpzIj48L3NjcmlwdD4gCiAgICA8c2NyaXB0PgogICAgICBjb25zdCBwID0gbmV3IFNpbXBsZVBlZXIoewogICAgICAgIGluaXRpYXRvcjogbG9jYXRpb24uaGFzaCA9PT0gJyMxJywKICAgICAgICB0cmlja2xlOiBmYWxzZQogICAgICB9KQogCiAgICAgIHAub24oJ2Vycm9yJywgZXJyID0+IGNvbnNvbGUubG9nKCdlcnJvcicsIGVycikpCiAKICAgICAgcC5vbignc2lnbmFsJywgZGF0YSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coJ1NJR05BTCcsIEpTT04uc3RyaW5naWZ5KGRhdGEpKQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNvdXRnb2luZycpLnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSkKICAgICAgfSkKIAogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdmb3JtJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZXYgPT4gewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCkKICAgICAgICBwLnNpZ25hbChKU09OLnBhcnNlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNpbmNvbWluZycpLnZhbHVlKSkKICAgICAgfSkKIAogICAgICBwLm9uKCdjb25uZWN0JywgKCkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdDT05ORUNUJykKICAgICAgICBwLnNlbmQoJ3doYXRldmVyJyArIE1hdGgucmFuZG9tKCkpCiAgICAgIH0pCiAKICAgICAgcC5vbignZGF0YScsIGRhdGEgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdkYXRhOiAnICsgZGF0YSkKICAgICAgfSkKICAgIDwvc2NyaXB0PiAKICA8L2JvZHk+CjwvaHRtbD4=
Подставив к коду #1, так же работает.

Так что можно принять за точку отсчета.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
В одноранговой сети не должно быть выделенных серверов. Браузер умеет открывать порт, умеет получать на этот порт данные, умеет отправлять данные. Этого достаточно для построения одноранговой сети.
С NAT все работает прекрасно! Во всяком случае не хуже чем в тех же условиях работает любая другая p2p сеть.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?

метод по ссылке работает исключительно на локальной машине,
Нет. Метод по ссылке работает не только на локальной машине. Не работает он только если кто-то из клиентов подключен через VPN

там написано "In a real-world application, you would never do this".

В переводе это означает: в реале вы так никогда делать не будете.
То есть имеется в виду, что в реальном применении вы не будете обмениваться сигнальными данными через CTRL+C и CTRL+V, а вместо этого будете использовать веб сокеты с сигнальным сервером или голубинную почту.

Я проглядел что там ещё CTRL+C и CTRL+V нужны, думал что-то попроще придумали. Значит без помощи пользователя не работает и на локальной машине. Вангую за NAT будет так же сложно как за VPN, а NAT очень распространённая штука. В любом случае, сервером браузер быть не умеет, поэтому неактуально подбирать костыли.
hero member
Activity: 1484
Merit: 505

Да, такая идея тоже имеет место быть. Даже знаю парней, которые сделали такой браузер https://github.com/Zigridar/blockchainsites
Это приложение которое подключается к тестовой сети биткоина и позволяет публиковать сайты не в интернет, а прямо в блокчейн. Там же встроенный браузер (на движке хромиум) который эти сайты может открывать так же как любые другие сайты в интернете.

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

Может я не совсем врубился, но какой толк от того что вы сохраните статический контент сайта в блокчейне один раз в момент запуска сайта? Любое последующее обновление и добавление контента обойдется дороже чем плата за хостинг.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

метод по ссылке работает исключительно на локальной машине,
Нет. Метод по ссылке работает не только на локальной машине. Не работает он только если кто-то из клиентов подключен через VPN

там написано "In a real-world application, you would never do this".

В переводе это означает: в реале вы так никогда делать не будете.
То есть имеется в виду, что в реальном применении вы не будете обмениваться сигнальными данными через CTRL+C и CTRL+V, а вместо этого будете использовать веб сокеты с сигнальным сервером или голубинную почту.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Имхо, тут в любом случае нужна децентрализованная БД, то есть блокчейн. Просто чтобы офферы хранить.

Лохчейн тут нужен не более чем лошадь в багажнике автомобиля для ускорения. Просто, чтобы больше лошадинных сил было. И как же браузер без централизации сможет прочитать этот лохчейн?
member
Activity: 126
Merit: 23
Не будет, потому что браузер это исключительно клиент, а чтобы уметь такую магию он должен быть ещё и сервером.

Я тоже так думал, но оказалось что ошибался. Браузер может быть и клиентом и сервером. Я уже два раза давал эту ссылку, дам еще раз: https://www.npmjs.com/package/simple-peer#usage
Там пример использования. Можно просто скопипастить код в текстовый файл с расширением html, открыть получившуюся страницу на своем компе двумя разными браузерами и без всяких STUN, TURN, сигнальных серверов, увидеть магию обмена данными по WebRTC!

А если подумать? Сервер это такая программная или аппаратная сущность, которая обслуживает (serve) запросы клиентов. Если в одном браузере открыт файл, а в другом закрыт, то этот браузер не отвечает. Следовательно это не сервер, а клиент. Но даже в формате клиент-клиент, метод по ссылке работает исключительно на локальной машине, где конечно без надобности узнавать внешний ip и обмениваться сигнальными данными, поэтому там написано "In a real-world application, you would never do this".

Имхо, тут в любом случае нужна децентрализованная БД, то есть блокчейн. Просто чтобы офферы хранить.
Синхронизация - вариант так себе.
И я как бы немного сомневаюсь, что на js-webrtc связке получится что нибудь лучшее, чем эфириум.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Не будет, потому что браузер это исключительно клиент, а чтобы уметь такую магию он должен быть ещё и сервером.

Я тоже так думал, но оказалось что ошибался. Браузер может быть и клиентом и сервером. Я уже два раза давал эту ссылку, дам еще раз: https://www.npmjs.com/package/simple-peer#usage
Там пример использования. Можно просто скопипастить код в текстовый файл с расширением html, открыть получившуюся страницу на своем компе двумя разными браузерами и без всяких STUN, TURN, сигнальных серверов, увидеть магию обмена данными по WebRTC!

А если подумать? Сервер это такая программная или аппаратная сущность, которая обслуживает (serve) запросы клиентов. Если в одном браузере открыт файл, а в другом закрыт, то этот браузер не отвечает. Следовательно это не сервер, а клиент. Но даже в формате клиент-клиент, метод по ссылке работает исключительно на локальной машине, где конечно без надобности узнавать внешний ip и обмениваться сигнальными данными, поэтому там написано "In a real-world application, you would never do this".
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Но вот по логике есть мой комп у него IP внутри какой то сети и что б к нему как к серверу кто то мог подключится из другой сете у него должен быть на внешнем ip открыт порт ... и второй клиент дожен знать мой внешний IP и порт...
Как не крути дожен быть кто то в общедоступном интернете кто скажет какие у клиентов адреса

Все верно. Для реального интернета нужны STUN сервера которые говорят браузерам: какой у них реальный адрес и порт.
Прелесть в том, что протоколу STUN вообще пофиг кто к нему обращается, задача протокола стандартная и поднять такой сервер можно даже внутри Великого Китайского Файрвола. То есть заблокировать STUN сервера если и можно, то я не представляю как.., особенно с учетом того что трафик к этим серверам вроде шифруется так же как обычный https.
sr. member
Activity: 1932
Merit: 349

браузер подключается к эфиру, например через метамаск, и с помощью
Dapp на js вызывает смарт контракт твоего обменника.
Авторизация через счет в блокчейне эфира, безопасно через метамаск.
При желании, можно сунуть туда и эскроу для всего что ERC20 держит.
Единственный минус - за объявки и коммуникацию платить газом надо.

Хотя - можно тупо на и на ропстене поставить, если там чисто
обмен сообщениями.


Хорошая тема, но я не склонен считать эфир (тем более через метамаск) - децентрализованной системой.
Хотя суть моей идеи вы уловили верно. Сможете помочь с реализацией?

Не будет, потому что браузер это исключительно клиент, а чтобы уметь такую магию он должен быть ещё и сервером.

Я тоже так думал, но оказалось что ошибался. Браузер может быть и клиентом и сервером. Я уже два раза давал эту ссылку, дам еще раз: https://www.npmjs.com/package/simple-peer#usage
Там пример использования. Можно просто скопипастить код в текстовый файл с расширением html, открыть получившуюся страницу на своем компе двумя разными браузерами и без всяких STUN, TURN, сигнальных серверов, увидеть магию обмена данными по WebRTC!


Два браузера на 1 компе или два браузера на компах в разных частях планеты сети интернет?
Глянул код и не увидел где там идентификаторы кто есть кто... но это ладно может #1 этого достаточно...
Но вот по логике есть мой комп у него IP внутри какой то сети и что б к нему как к серверу кто то мог подключится из другой сете у него должен быть на внешнем ip открыт порт ... и второй клиент дожен знать мой внешний IP и порт...
Как не крути дожен быть кто то в общедоступном интернете кто скажет какие у клиентов адреса
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

браузер подключается к эфиру, например через метамаск, и с помощью
Dapp на js вызывает смарт контракт твоего обменника.
Авторизация через счет в блокчейне эфира, безопасно через метамаск.
При желании, можно сунуть туда и эскроу для всего что ERC20 держит.
Единственный минус - за объявки и коммуникацию платить газом надо.

Хотя - можно тупо на и на ропстене поставить, если там чисто
обмен сообщениями.


Хорошая тема, но я не склонен считать эфир (тем более через метамаск) - децентрализованной системой.
Хотя суть моей идеи вы уловили верно. Сможете помочь с реализацией?

Не будет, потому что браузер это исключительно клиент, а чтобы уметь такую магию он должен быть ещё и сервером.

Я тоже так думал, но оказалось что ошибался. Браузер может быть и клиентом и сервером. Я уже два раза давал эту ссылку, дам еще раз: https://www.npmjs.com/package/simple-peer#usage
Там пример использования. Можно просто скопипастить код в текстовый файл с расширением html, открыть получившуюся страницу на своем компе двумя разными браузерами и без всяких STUN, TURN, сигнальных серверов, увидеть магию обмена данными по WebRTC!

sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Вообще-то у меня есть мечта: сделать полностью независимый ни от кого обменник. Первое, что для этого нужно - создание надежной p2p сети, доступ к которой сможет в два клика поиметь любая домохозяйка.

Я себе представляю такую сеть как статичный html файл на рабочем столе пользователя.
Файл открывается в браузере, браузер подключается к пирам которых он запомнил с прошлой сессии. Только если все пиры недоступны, тогда браузер подключается к сидерам через сигнальные или TURN сервера.
То есть не нужно устанавливать никаких дополнительных приложений. Браузер есть у всех.
Загвоздка в том, что я пока даже не знаю - будет ли это работать в принципе через WebRTC? Хотя теоретически выглядит привлекательно.

Не будет, потому что браузер это исключительно клиент, а чтобы уметь такую магию он должен быть ещё и сервером.

Сам идеальный децентрализованный обменник представляю себе так:
А посылает публичное сообщение в общедоступную доску объявлений: "продам битки за яндекс рубли" Сообщение содержит в себе публичный ключ и цифровую подпись.
Б шлет приватное сообщение для А: "куплю твои битки через гаранта В"
А посылает сообщение для Б: "нет, давай через гаранта Г"
Б посылает сообщение: "ладно давай"...
А посылает публичное сообщение в общедоступную доску объявлений: "предложение закрыто"
Дальше идет обычный обмен через гаранта.

То есть p2p обменник это по сути обычный месседжер плюс доска объявлений. Гарантов можно искать в других местах.

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

браузер подключается к эфиру, например через метамаск, и с помощью
Dapp на js вызывает смарт контракт твоего обменника.
Авторизация через счет в блокчейне эфира, безопасно через метамаск.
При желании, можно сунуть туда и эскроу для всего что ERC20 держит.
Единственный минус - за объявки и коммуникацию платить газом надо.

Хотя - можно тупо на и на ропстене поставить, если там чисто
обмен сообщениями.

Зачем биткоину эфир и зачем платить за трафик, если это только ограничивает функционал?
member
Activity: 126
Merit: 23

Вообще-то у меня есть мечта: сделать полностью независимый ни от кого обменник. Первое, что для этого нужно - создание надежной p2p сети, доступ к которой сможет в два клика поиметь любая домохозяйка.

Я себе представляю такую сеть как статичный html файл на рабочем столе пользователя.
Файл открывается в браузере, браузер подключается ...

браузер подключается к эфиру, например через метамаск, и с помощью
Dapp на js вызывает смарт контракт твоего обменника.
Авторизация через счет в блокчейне эфира, безопасно через метамаск.
При желании, можно сунуть туда и эскроу для всего что ERC20 держит.
Единственный минус - за объявки и коммуникацию платить газом надо.

Хотя - можно тупо на и на ропстене поставить, если там чисто
обмен сообщениями.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Для WebRTC много чего уже написано, так что если у кого-то что-то не получилось, это никакой не показатель полезности/бесполезности технологии. Я уже приводил ссылку, приведу еще раз https://www.npmjs.com/package/simple-peer
Если лень ходить по ссылке, то процитирую здесь:
Quote
Who is using simple-peer?

    WebTorrent - Streaming torrent client in the browser
    Instant.io - Secure, anonymous, streaming file transfer
    Zencastr - Easily record your remote podcast interviews in studio quality.
    Friends - Peer-to-peer chat powered by the web
    Socket.io-p2p - Official Socket.io P2P communication library
    ScreenCat - Screen sharing + remote collaboration app
    WebCat - P2P pipe across the web using Github private/public key for auth
    RTCCat - WebRTC netcat
    PeerNet - Peer-to-peer gossip network using randomized algorithms
    PusherTC - Video chat with using Pusher. See guide.
    lxjs-chat - Omegle-like video chat site
    Whiteboard - P2P Whiteboard powered by WebRTC and WebTorrent
    Peer Calls - WebRTC group video calling. Create a room. Share the link.
    Netsix - Send videos to your friends using WebRTC so that they can watch them right away.
    Stealthy - Stealthy is a decentralized, end-to-end encrypted, p2p chat application.
    oorja.io - Effortless video-voice chat with realtime collaborative features. Extensible using react components 🙌
    TalktoMe - Skype alternative for audio/video conferencing based on WebRTC, but without the loss of packets.
    CDNBye - CDNBye implements WebRTC datachannel to scale live/vod video streaming by peer-to-peer network using bittorrent-like protocol
    Detox - Overlay network for distributed anonymous P2P communications entirely in the browser
    Metastream - Watch streaming media with friends.
    firepeer - secure signalling and authentication using firebase realtime database
    Genet - Fat-tree overlay to scale the number of concurrent WebRTC connections to a single source (paper).
    WebRTC Connection Testing - Quickly test direct connectivity between all pairs of participants (demo).
    Firstdate.co - Online video dating for actually meeting people and not just messaging them
    TensorChat - It's simple - Create. Share. Chat.

Этот список только тех, кто использует конкретно библиотеку simple-peer
Разумеется, список не полный и реально работающих приложений в десятки или сотни раз больше. Так что на мой взгляд рано списывать эту технологию на пенсию.

Вообще-то у меня есть мечта: сделать полностью независимый ни от кого обменник. Первое, что для этого нужно - создание надежной p2p сети, доступ к которой сможет в два клика поиметь любая домохозяйка.

Я себе представляю такую сеть как статичный html файл на рабочем столе пользователя.
Файл открывается в браузере, браузер подключается к пирам которых он запомнил с прошлой сессии. Только если все пиры недоступны, тогда браузер подключается к сидерам через сигнальные или TURN сервера.
То есть не нужно устанавливать никаких дополнительных приложений. Браузер есть у всех.
Загвоздка в том, что я пока даже не знаю - будет ли это работать в принципе через WebRTC? Хотя теоретически выглядит привлекательно.

Сам идеальный децентрализованный обменник представляю себе так:
А посылает публичное сообщение в общедоступную доску объявлений: "продам битки за яндекс рубли" Сообщение содержит в себе публичный ключ и цифровую подпись.
Б шлет приватное сообщение для А: "куплю твои битки через гаранта В"
А посылает сообщение для Б: "нет, давай через гаранта Г"
Б посылает сообщение: "ладно давай"...
А посылает публичное сообщение в общедоступную доску объявлений: "предложение закрыто"
Дальше идет обычный обмен через гаранта.

То есть p2p обменник это по сути обычный месседжер плюс доска объявлений. Гарантов можно искать в других местах.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Отличие WebRTC в том, что связь идет напрямую, а не через сервер мордокниги, вконтакта, ютуба и т.п. То есть это в чистом виде p2p соединение.

Не всегда напрямую (TURN) и всегда не в чистом виде.

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

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

Есть идея: создать децентрализованную WebRTC сеть в которой сигнальными серверами, будут сами клиенты (браузеры, приложения).
То есть совсем от настоящих сигнальных серверов отказаться не получится, но попытаться минимизировать их роль в поддержке сети.

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

Я на эту идею джва года как забил. Минимизировать роль сигнальных серверов невозможно, потому что WebRTC это не настоящий p2p.

Суть в том, что нужно провести что-то типа научного исследования... То есть сейчас мне не понятно в принципе: реализуема ли идея или нет?

Нет.

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

Это не тупой набор текстовых данных. К нему прилагается маршрут, поэтому никакой магии нет. Без браузеров и WebRTC хендшейк нескольких пиров организовать ещё проще, что более магично, как по мне.

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

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

Так не получится. Протухают даже при закрытии вкладки, порты закрываются, движок отклоняет все некошерные соединения. Браузеры это проприетарное говно с открытым исходным кодом, поэтому никакой децентрализации и прочих p2p они совсем не умеют, а все их фичи a.k.a. стандарты отдалённо похожие на это спроектированы настолько извратно, чтобы их использование третьей стороной никак не могло угрожать централизованной монополии Цукербринов.
sr. member
Activity: 1932
Merit: 349
Первое: тема самомодерируемая, все сообщения от investgroup буду удалять не читая.
...

Вот это правильно  Grin
и была ж где то тема про децентрализованный чат и там много букв уже понаписали или это она и есть?
legendary
Activity: 2646
Merit: 1141

Да, такая идея тоже имеет место быть. Даже знаю парней, которые сделали такой браузер https://github.com/Zigridar/blockchainsites
Это приложение которое подключается к тестовой сети биткоина и позволяет публиковать сайты не в интернет, а прямо в блокчейн. Там же встроенный браузер (на движке хромиум) который эти сайты может открывать так же как любые другие сайты в интернете.

А вот эта тема очень интересная. Получается, что можно сделать сайт и заплатив за первичное размещение больше не беспокоится о продлении домена, оплате хостеру. Т.е. он будет в интернете навечно. Думаю, что когда народ просечет эту фишку, то все сайты потихоньку туда и переместятся.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Возникла идея - можно ли приспособить для такого вот localStorage стандартный мемо пул?
Броузер делается на базе обычного кошелька. При необходимости обменяться информацией с другим пользователем ему просто посылается транзакция с сообщением, которая попадает в мемо пул.

Да, такая идея тоже имеет место быть. Даже знаю парней, которые сделали такой браузер https://github.com/Zigridar/blockchainsites
Это приложение которое подключается к тестовой сети биткоина и позволяет публиковать сайты не в интернет, а прямо в блокчейн. Там же встроенный браузер (на движке хромиум) который эти сайты может открывать так же как любые другие сайты в интернете.
legendary
Activity: 2646
Merit: 1141

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


Возникла идея - можно ли приспособить для такого вот localStorage стандартный мемо пул?
Броузер делается на базе обычного кошелька. При необходимости обменяться информацией с другим пользователем ему просто посылается транзакция с сообщением, которая попадает в мемо пул.
sr. member
Activity: 1736
Merit: 254
Сегодня проверял безопасность браузера хром и наткнулся на какой-то плагин web rtc. И удалил. Даже не помню для чего его установил, или кто-то установил мне
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
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 адреса.



member
Activity: 264
Merit: 13
Есть идея: создать децентрализованную WebRTC сеть в которой сигнальными серверами, будут сами клиенты (браузеры, приложения).
То есть совсем от настоящих сигнальных серверов отказаться не получится, но попытаться минимизировать их роль в поддержке сети.

Сейчас идея на стадии идеи. Концепция более или менее уже понятна. Совсем нет времени на реализацию. Если кто-то захочет реализовать, то буду рад помочь и поучаствовать в разработке.
Ну, по сути Вы описываете идею банального децентрализованного интернета. Она существует даже в виде целого американского сериала, где несколько стартаперов якобы лепят нечто подобное.
Технически это возможно реализовать и тут нет ничего сложного, просто каждый участник должен одновременно поддерживать связанные приложения (демоны), каждое из которых отвечает за свою часть работы системы в целом. Один демон - пользователь, другой - сервер, третий - БД, четвертый - неймер (DNS), пятый - гидер и так далее.
С современными мощностями нет никакой проблемы реализовать подобный пакет на базе одного компа. Для раскрутки проекта проще всего начать с реализации простейшего мессенджера, но с высокой степенью анонимизации, глубоким шифрованием и прочими плюшками. Дальше можно это расширять до уровня автономных сайтов, торрент-трекеров и так далее.
НО! Чтобы это все работало не через пень-колоду, нужно это делать не по принципу слоно-жирафо-оленя, лепя один хардкорный движок на другой, и заделывая все щели скриптами. Нужно писать чистый код бэкграунда с нуля на компилируемом языке.
Ну и средства нужны для финансирования такого детища. Хотя бы на старте, пока не заработает мессенджер, а там можно пробовать привлекать средства через рекламу (я бы даже на это пошел, чтобы раскрутить такой проект).
legendary
Activity: 3108
Merit: 1359
WebRTC на данный момент не совсем жив.

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

https://peerjs.com/

Описанная же проблема общая для всех P2P сетей, включая биткойн, нодам которого для начального обмена пирами тоже приходится полагаться на централизованный dns seed. Увы, любой P2P сети нужно с чего-то начинаться, если хочется чтобы она была массовой. В противном случае, будет как с CJDNS - идеальная децентрализация при почти полном отсутствии потребителей.
sr. member
Activity: 1337
Merit: 288
0xbt
В этой сети остались фанаты и узкие специалисты.
Думаю, чем меньше мы о ней будем вспоминать, тем быстрее о ней будут забывать, следовательно более менее она будет оставаться, так сказать, менее более(тавтология) децентрализованной  Smiley.
По моему в топике fxpc, вроде как этот вариант рассматривался.
(не хочется перечитывать)
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Первое: тема самомодерируемая, все сообщения от investgroup буду удалять не читая.

Теперь по теме.

Коротко о технологии WebRTC, если кто-то не знает или чтобы просто освежить в памяти.

WebRTC это технология, которая позволяет соединяться напрямую двум браузерамм (и другим приложениям которые поддерживают эту технологию). После соединения, иожно обмениваться любыми данными: стриминговые видео, просто файлы, текстовые сообщения... в общем любыми которые поддерживает браузер или приложение.

Отличие WebRTC в том, что связь идет напрямую, а не через сервер мордокниги, вконтакта, ютуба и т.п. То есть это в чистом виде p2p соединение.

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

Есть идея: создать децентрализованную WebRTC сеть в которой сигнальными серверами, будут сами клиенты (браузеры, приложения).
То есть совсем от настоящих сигнальных серверов отказаться не получится, но попытаться минимизировать их роль в поддержке сети.

Сейчас идея на стадии идеи. Концепция более или менее уже понятна. Совсем нет времени на реализацию. Если кто-то захочет реализовать, то буду рад помочь и поучаствовать в разработке.
Jump to: