Expand chat README and add stream image
This commit is contained in:
1 parent
550f384c69
commit
a31436e421
2 files changed
+43
-1
No files matched your search
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
+43
-1
@@ -1,6 +1,6 @@
|
||||
Vibechat
|
||||
|
||||
Децентрализованный чат, с поддержкой групп. По дизайну отправляет сообщения преимущественно напрямую адресату, а если прямое подключение невозможно то только через участников группы.
|
||||
Децентрализованный чат, с поддержкой групп. По дизайну отправляет сообщения преимущественно напрямую адресату, а если прямое подключение невозможно то только через других участников этой группы.
|
||||
Участника группы можно сделать суперузлом и медиаузлом. Суперузел должен иметь прямой ip адрес. Такие узлы будут помогать маршрутизации между узлами, а медиаузлы - хранению контента группы.
|
||||
Также есть личные сообщения - которые могут проходить через промежуточные узлы, но только в зашифрованном виде, включая аттачи. Если адресат недоступен, отправитель просит медиаузел сохранить собощение и передать узлу когда он станет доступен.
|
||||
Контент группы хранится на узлах которые его загрузили в незашифрованном виде.
|
||||
@@ -12,3 +12,45 @@
|
||||
- режим рации внутри группы с возможностью вызова абонента;
|
||||
- видеотрансляции внутри группы;
|
||||
- возможность смотреть все трансляции одновременно с собственной трансляцией - получается функционал видеочата. Одновременно можно использовать рацию.
|
||||
|
||||
|
||||
Как работает чат.
|
||||
Любой участник может создать собственную группу. По сути он генерирует пару ключей, секретный улюч хранит у себя, соответственно становится владельцем группы. Автоматически добавляет себя в список пользователей и подписывает ключом группы как корневой пользователь. Появляется группа из одного пользователя.
|
||||
Дальше можно приглашать других пользователей в группу. Для этого генерируем ссылку-приглашение, которую другой пользователь вставляет к себе. Приглашая первого пользователя, важно чтобы пользователь мог напрямую подключиться к вам, поскольку только вы владеете группой и только у вас есть эта группа (никакие другие сервера и узлы не используются - только участники этой группы).
|
||||
|
||||
Участники между собой обмениваются ip адресами чтобы они могли напрямую передавать данные друг другу и поддерживать связь. А также при запуске приложения искать узлы у которых не поменялись адреса и к которым можно подключиться и передавать сообщения (кто еще онлайн из этой группы).
|
||||
Если у всех участников группы поменялись адреса, то подключться не получится. Для решения нужен другой участник группы с пригласительой ссылкой. По этой ссылке можно заново подключиться к другому участнику (который например был онлайн и вовремя обновлял актуальные адреса других участников)
|
||||
При подключении узлы которые сейчас доступны, строят таблицу маршрутизации между собой. Таким образом они могут доставлять друг другу сообщения используя помощь других таких же узлов. Каждая группа работает раздельно - для группы A узлы других групп не используются.
|
||||
|
||||
К каждая группа - это 3 базы данных, копии которых хранятся у всех пользователей этой группы и они же обмениваются обновлениями, распространяя их по остальным узлам когда узел появляется в сети.
|
||||
- база пользователей. Причём добавить нового пользователя может существующий пользователь, при этом он должен заверить добавление (оставить свою подпись). Таким образом в группе образуется дерево - кто кого добавил.
|
||||
- база сообщений. Построена по принципу blockchain - каждая новая запись содержит валидную подпись предыдущей. Каждое сообщение подписывается подльзователем (т.е. подделать сообщение нельзя)
|
||||
- база реакций, результатов опросов, узлов зранения медиаданных - merkle база, каждый элемент подписан автором, синхронизируется между всеми узлами. Содержит лайки, кто как проголосовал, какдля сообщений - какие узлы загрузили аттачи этих сообщений.
|
||||
|
||||
То есть: все данные группы распространяются только между узлами, вступившими в группу.
|
||||
Лбюого участника группы можно сделать суперузлом или медиаузлом (это делает владелец группы). Это специальные узлы, помогающие подключаться пользователя и сохранять объемные вложения.
|
||||
- суперузел - это узел который постоянно присутствует в сети и приоритетно принимает подключения (помогает подключаться узлам за nat/firewall). У этого узла очень желателен постоянный публичный IP адрес для стабильной работы группы через интернет. Его главная задача - связывать узлы друг с другом, а не хранить данные.
|
||||
- медиаузел - узел который автоматически загружает и сохраняет аттачи опубликованные в группе чтобы при недоступности узла автора сообщений их можно было загрузить. Узел может быть одновременно и суперузлом и медиаузлом.
|
||||
|
||||
Узлы группы которые онлайн, строят таблицу маршрутизации друг между другом и могут напрямую или через помощников актуализировать информацию о себе через другие узлаы. Таким образом они обновляют собственные ip адреса/порты, статусы друг друга - у кого включена рация, кто запустил трансляцию видео, кто занят (звонит) если разрешены соответствующие настройки отправки статусов.
|
||||
|
||||
Также доступны личные сообщения.
|
||||
Сообщения преимущественно передаются напрямую (если оба узла в сети и могут напрямую подключитсья), либо через посредника (если все 3 узла в одной группе).
|
||||
Если узел недоступн то сообщения могут временно отдаваться суперузлу и аттачи медиаузлу на хранение, пока получатель недоступен.
|
||||
Через посредников вся личные сообщения и аттачи отправляются в зашиврованном виде (шифруются ключом полуателя).
|
||||
|
||||
Транспорт.
|
||||
Каждый узел (или участник чата) имеет собственную сгенерированную пару ключей (публичный-приватный). Весь трафик между узлами шифруется этими ключами.
|
||||
|
||||
Таким образом:
|
||||
- личные сообщения - доступны только отправителю и получателю в расшифрованном виде, и узлу для промежуточного хранения в зашифрованном виде (если получатель оффлайн и не удалось доставить)
|
||||
- сообщения и аттачи группы хранятся только у участников этой группы, в незашифрованном виде. Доступ к ним можно получить только если участник группы пригласит вас в группу и вы подключитесь. Ну либо физически скачать из устройства котороое подключено к группе.
|
||||
- если аттач никем не был скачан и пока вы оффлайн - аттач недоступен для остальных. Для решения этого используется медиасервер который автоматически скачивает аттач.
|
||||
|
||||
10 узлов. один узел запустил трансляцию. еще 2 суперузла в интернете.
|
||||
допустим 6 узлов смотрят трансляцию. например 3 на телефоне, 3 на десктопе. Через телефон ретрансляция не автивируется (экономим заряд). десктопы и суперузлы могут ретранслировать.
|
||||
узлы которые хотят смотреть трансляцию, а также суперузлы проверяют связь друг с другом и выстраивают связь друг через друга так чтобы получить оптимальный путь распространения видеопотока по всем узлам. соответственно часть узлов будет ретрансляторами - принимать поток у более близких узлов или у источника трансляции и передавать следующим узлам.
|
||||
нарисуй схему иллюстрирующую такую топологию.
|
||||
|
||||
Звонок.
|
||||
Узлы пробуют связаться друг с драом напрямую всеми возможными способами. если это не получается то выбирают посредника с наилучшей сетевой доступностью и направляют трафик через него (в зашифрованном виде).
|
||||
Reference in new issue
Block a user