Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавить описание технологии #3

Open
heX16 opened this issue Aug 16, 2021 · 1 comment
Open

Добавить описание технологии #3

heX16 opened this issue Aug 16, 2021 · 1 comment

Comments

@heX16
Copy link

heX16 commented Aug 16, 2021

Я скопирую постом ниже ответ данный автором в комментарии в youtube.

Думаю полезно этот ответ добавить в Wifi или Readme.

@heX16
Copy link
Author

heX16 commented Aug 16, 2021

Сейчас проект на стадии Proof of Concept,это больше демо того что это вообще возможно и поэтому многое устроено наивно. Я отвечу как оно уже работает, и как можно сделать потом.

Все написано на JS, соответственно можно прогонять проект прямо из HTML файла.

Проект состоит из нескольки ключевых деталей:

  1. Гит в браузере.
    Это самая сложная работа, и слава богу для этого уже есть библиотека, которая все выполняет: iso-git(https://isomorphic-git.org/).

Внутри гит использует BrowserFS(https://github.com/jvilk/BrowserFS).
На данный момент в качестве бэкэнда используется IndexedDB, но сейчас очень круто развивается FileSystem API(https://developer.mozilla.org/en-US/docs/Web/API/FileSystem https://web.dev/file-system-access/) и похоже на нем можно получить прямой доступ к жесткому диску.

  1. Соединение пользователей

Соединение и синхронизация данных выполняется через WebRTC data channels, пока сделана full mesh топология. Это работает только для малого числа пользователей. Но можно было бы использовать уже работающий в JS WebTorrent, не знаю IPFS, blockchain , существующие протоколы что бы быть настоящей распределенной сеткой и OpenSource бы уже ничто не угрожало))) Или может даже имплементировать какие-то хорошие протоколы полностью через WebRTC, что бы обеспечить универсальность и кроссплатформенность

Signalling(поиск пользователя в сети) можно делать в ручную - тогда надо пересылать друг другу коды например через мессенджер или фоткать QR коды друг друга) Но уже поддерживаются signalling через HTTPS или Firebase. Обычно его имплементируют через вебсокеты. Хотелось бы пока оставаться универсальными и пускай каждый делает signalling как хочет.

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

  1. Для того что бы пушить/пуллить из командной строки написаны git remote helper(https://git-scm.com/docs/gitremote-helpers). Они точно так же соединяются через WebRTC и отправляют/принимают гит-пакеты.

В идеи архетиктуры есть три сущности - приложения, данные, сеть. Хотелось бы хранить данные полнустью у пользователя. И что бы доступ к ним и к сети запрашивали приложения в Sandbox манере. И тогда можно было бы использовать разные приложения для тех же данных - хочешь пользуешься Paint, хочешь Photoshop. И если данные хранить у пользователя, то распределенный фейсбук будет использовать тоже самое что и распределенный myspace, и тогда пускай они уже конкурируют как просто приложения. А не так что у кого данные тот и выйграл.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant