Pull to refresh

Comments 23

Мы опубликовали исходный код наших разработок


Интересно вы ведете разработку. Одним коммитом зафигачили всю кодовую базу? А где история, где до этого вы вели разработку?

Мы ведем разработку в своем репозитории. В гитхаб выкладываются все релизы. Пока вся разработка ведется исключительно нашей командой, переносить весь процесс в гитхаб нет необходимости
Было бы неплохо увидеть сравнение с matrix.org
И мотивацию, которая сподвигла написать свое решение.
  • В matrix идентификация пользователей похожа на e-mail: alice@server.com. У нас идентификатор пользователя — случайное число. За счет отсутствия привязки идентификатора к серверу, у нас пользователь может переезжать между серверами со всеми своими данными.
  • Протокол позволяет проксировать соединения пользователя между хабами. Например, пользователь U(a) не может напрямую подключиться к своему хабу H(a), но может подключиться к H(b). За счет проксирования получается цепочка соединений U(a) <-> H(b) <-> H(a).
  • Серверное приложение из коробки имеет массу настроек под разные юрисдикции, включая российскую.
  • Мы используем WebSocket, а не REST.
  • У нас есть голосования с цифровыми подписями, которые можно использовать для согласования документов.
  • У нас нет звонков, но наш проект еще слишком молод. На сегодняшний день он уже способен работать и решать задачи пользователей.
  • У нас нет API для ботов и интеграций. Причина полностью аналогична предыдущему пункту.
UFO just landed and posted this here
на какой рынок нацелены Вы?

Мы разрабатываем мессенджер как корпоративный инструмент, но и про физиков не забываем :) в корпорациях же все равно работают люди, которые пользуются и телегой и WhatsApp. Они ведь видят как можно удобно сделать инструмент, поэтому мы тоже стараемся сделать его удобным для людей.


С кем бы перетереть?

sazonovd@corp.ymessenger.org можете найти меня по почте в нашем приложении или @DmitriySazonov в телеге

А большая ли у Вас команда, чтобы довести текущий проект до уровня Матрикса? Да и даже если есть большая команда — без постоянного финансирования энтузиазма надолго не хватит ведь… Судя по описанию, сейчас проект находится на самой начальной стадии, и работы там ещё очень много предстоит.

Матрикс вон уже много лет активно разрабатывается и довольно большой командой, с нехилым финансированием и поддержкой, но до сих пор ещё много всего доделывать и развивать нужно.

Мне кажется, Вам с текущими идеями было бы оптимальнее присоединиться к разработке протокола Матрикс и привнести туда свои идеи — там очень активное сообщество, которое с удовольствием поддержит ваши идеи, обсудит, проанализирует, и, возможно, даже активно подключится к разработке! И даже если Ваши идеи там вдруг не особо поддержат — Вы всегда можете сами поверх Матрикса запилить то, что там нехватает для Вас и Ваших клиентов, в своей реализации клиентов и серверов.

Я уже несколько компаний перевёл со всяких Слаков-Вайберов-Вацапов-Скайпов-Рокетчатов на Матрикс, и все счасливы!

Из того что Вы описали по недостаткам — всё это уже запланировано в Матриксе, но пока у них руки не дошли:

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

И даже p2p-клиенты без сервера: matrix.org/blog/2020/06/02/introducing-p-2-p-matrix

Также стоит учесть, что Матрикс разрабатывает в первую очередь не «ещё один мессенджер», а открытый универсальный протокол для мессенджеров, на базе которого уже сделано несколько разных реализаций серверов и клиентов, а также вполне рабочие мосты в другие сети.
Молодцы! В подобных решениях радует то, что единожды опубликованный проект сможет жить даже без дальнейшей поддержки оригинальных авторов; всё благодаря децентрализованному дизайну. Вы опубликовали главное — протокол взаимодействия элементов системы. Спасибо вам за вашу работу!

1)
Как вы считаете кол-во не прочитанных сообщений?
Получается у вас есть автоинкремент по chatID?
И структура userReadSeq: int?
Расскажите подробнее про этот момент, т.к. если у вас автоинкремент, то получается один чат может поддерживать 1 сервис, если есть горизонтальное масштабирование.


2)
И еще беглым взглядом посмотрел.
Допустим у нас есть 100 сообщений, пропадает интернет, тут приходит через WS 107-е сообщение, как вы решаете данный вопрос? request на 100 > GET < 107?

  1. Как считаем непрочитанные сообщения
    1.1. В диалогах
    Каждое сообщение хранится в двух экземплярах, по одному для каждого из собеседников. У сообщения есть флаг Read:bool, а количество непрочитанных = количеству входящих с Read == false
    1.2 В групповых чатах
    В чатах/каналах каждый участник имеет поле с идентификатором последнего прочитанного сообщения. Количество непрочитанных = количество входящих сообщений после сообщения с ID = последнему прочитанному.
  2. Решение этой проблемы сейчас стоит в очереди. Либо клиент будет определять момент обрыва соединения и, после соединения, запрашивать с хаба недошедшие по ID последнего известного клиенту, либо в объект сообщения добавим ссылку на предыдущее и при получении 107 клиент увидит идентификатор предыдущего — 106, определит что его нет в локальной базе и запросит его.
Интересно и достаточно детально написано. Спасибо.

Возник вопрос: а как при передаче ключей от А к В обходится ситуация, когда А уже выключен (не отвечает на запросы)? Например, пользователь отложил телефон, телефон залочен, и пользователь входить в чат с ПК.

Мы решаем похожую проблему и пока не нашли элегантного решения. Мы шифруем приватный ключ мастер фразой и храним на сервере. Тогда пользователь входящий с ПК должен ввести мастер фразу для расшифровки ключа. Но это неудобно с точки зрения UX т.к. большенство пользователей не заморачиваются запоминанием мастер фразы.
Возник вопрос: а как при передаче ключей от А к В обходится ситуация, когда А уже выключен (не отвечает на запросы)? Например, пользователь отложил телефон, телефон залочен, и пользователь входить в чат с ПК.

Хороший вопрос. Да, это серьезная проблема и у нас есть только два решения:


  • разбудить приложение через push-уведомление;
  • сделать сервис для фоновой работы.

Ни одно из решений мы у себя еще не реализовали.


Если девайс прям выключен, то все. Без стороннего хранилища не обойтись, а мертвые клиенты на запросы не отвечают.


Хранить мастер-фразу на хабе в нашем случае достаточно рискованно, даже в зашифрованном виде. Запоминать мастер-фразу обычный пользователь вряд ли будет. Мы в интерфейсе пишем как это важно и предлагаем его куда-нибудь записать. Мастер-фразой может быть какой-нибудь афоризм, который легко запомнить или найти.

Ха! Да, мы тоже именно эти два варианта и рассматриваем :) Склоняемся больше к push уведомлениям

В отличие от централизированных мессенджеров, мы не имеем доступа к данным пользователей на хабах. Бэкдоры для несанкционированного доступа мы не ставили и с открытым кодом это неразумно. У администратора хаба есть доступ к нешифрованной переписке и возможность запретить шифрованную переписку своим пользователям. При возникновении вопросов в рамках СОРМ, отвечать на них придется администратору хаба.


В этом вопросе наш мессенджер очень похож на электронную почту. Есть сервер с открытым исходным кодом (как Postfix), есть протокол, есть клиент с открытым кодом. Если возникает вопрос в рамках СОРМ, то ответственные лица будут задавать вопросы не (к сожалению ныне покойным) разработчикам почты, Ноэлю Моррису и Тому Ван Влеку, а владельцам сервера где все произошло.

У администратора хаба есть доступ к нешифрованной переписке и возможность запретить шифрованную переписку своим пользователям.
Вот это просто никуда не годится. Это защищённость не то, что «на уровне Tox, BitMessage», но, пожалуй, даже хуже, чем у тех же Telegram и WhatsApp.

У администрации любого сервиса которым вы пользуетесь (мессенджер, почта, соц.сети) есть доступ к вашей незащищённой информации. Вы вполне спокойно доверяете свои данные каким-то людям. В нашем проекте вы можете запустить сами для себя хаб и общаться со своими друзьями только в рамках своего личного хаба. Никто кроме вас не получит доступ к этой информации.

В описаниях разных мессенджеров периодически проскакивают слова «end-to-end шифрование». Соответственно, где не обманывают — там нет доступа к пользовательским сообщениям. Для почты есть GPG (хоть это и геморрой), а если шифрование не используют, то пользователи знают о незащищённости. То же и с соцсетями. А в данной статье написано «защищенным на уровне Tox, BitMessage», а потом вдруг оказывается, что непонятно кто имеет доступ к нешифрованной переписке… По-моему, это прямое введение в заблуждение.

В нашем мессенджере есть end-to-end шифрование, но это опциональная возможность. В некоторых других продуктах это обязательная опция, которая добавляет приватности, но лишает пользователей ряда возможностей. Если вы будете использовать оконечное шифрование в Y messenger, он будет защищен как Tox и BitMessage. Если не использовать — сообщения сохранятся на сервере в открытом виде и администратор будет иметь возможность читать эту переписку. Такая же возможность есть у администраторов других мессенджеров. Какой вариант использования вам лучше подходит — решать вам, мы предлагаем оба варианта.

В любом случае, не стоит говорить про «защищенным на уровне Tox, BitMessage», если это опциональная возможность, которую отдельно требуется включать и т.д. И уж тем более если «У администратора хаба есть доступ к нешифрованной переписке и возможность запретить шифрованную переписку своим пользователям».

И вообще, если шифрование сделать возможно, то для чего вообще делать режим без шифрования, почему не шифровать всё?
блокчейн не приспособлен для обработки быстрых вставок

Это почему это? Это ж не биток, при адекватной реализации (типа KSI blockhain) хоть миллиарды транзакций в секунду.


И ещё… Чего лишены большинство (если не все) мессенжеры — это удобной работы с историей сообщений, типа поиска (ключевые слова, даты, etc), тэгов (на отдельные сообщения или индивидуальные негрупповые чаты) и букмарков (фаворитов) — вот это реально киллер-фича, всё остальное уже более-менее одинаково у всех.


Также было бы очень ценно иметь возможность адекватных бэкапов аккаунта (полных и инкрементальных) со всей историей всех сообщений (со всеми метаданными и файлами) в любой момент, как с помощью API так и по плану, в любое удобное место (как минимум локальный бэкап + sftp, а не куда-то в чужое облако), в легко машинно-читаемом документированном формате (json/xml или типа того) с возможностью восстановления из оного даже если все активные устройства одновременно сгорели (но пользователь ещё помнит пароль на зашифрованный бэкап).


Разумеется, всё это в сочетании с прозначной синхронизацией между любым набором устройств (desktop + mobile), но это вы уже вроде реализуете (если я правильно понял).


Из всех существующих мессенжеров (не считая корпоративных, их я не смотрел) выше упомянутое не реализовано нигде, или реализовано очень неудобно, неполно и со странными ограничениями.

1) какие то оптимизации\пережимы медиа делаются?
2) где и как формируются фамбнейлы для видео?

1) Картинки пережимаются и на клиенте, и на сервере. Можно отправить картинку как документ и передать без сжатия.
2) С видео пока не работаем, оно просто передается как файл без генерации превью.

Sign up to leave a comment.

Articles