История изменений
Исправление
commagray,
(текущая версия)
:
У каждого сервера есть свой «content/media repository», куда складируются все загруженные файлы с присвоением уникального ID. На файловой системе это будет выглядеть как /matrix-for-yourserver.com/media/yourserver.com/some-id-of-a-file
. Клиент может загрузить файл на сервер с помощью API, даже не находясь в какой-либо комнате, в ответ получив от сервера идентификатор файла.
Когда клиент находится в какой-то комнате, он может отправить этот файл для публики в виде JSON-события, типом которого будет являться файл, а в описании будет указан идентификатор ранее загруженного файла на сервер. Такие события, вместе с обычными сообщениями и вообще всеми другими вещами, составляют DAG — линейную историю событий. Эта история событий всегда реплицируется между серверами. Каждый сервер хранит свою копию DAG комнат.
Когда в чат присоединяется новый сервер, он начинает процесс копирования истории DAG. В этой истории событий есть отправленный нами файл, поэтому новый сервер просит у старого сервера отдать ему этот файл, чтобы скачать его себе локально и отобразить его для своих клиентов. Этот файл копируется и на новом сервере попадает на файловую систему в виде /matrix-for-anotherserver.net/media/yourserver.com/some-id-of-a-file
.
https://matrix.org/docs/spec/server_server/r0.1.4#content-repository
https://matrix.org/docs/spec/client_server/r0.6.1#id66
То есть, MXC-ссылка является URI в виде «исходный сервер, по адресу котого нужно искать в локальном кэше скопированный репозиторий контента ИЛИ адрес сервера, у которого этот репозиторий надо запрашивать, если он отсутствует в локальном кэше» + «внутренний идентификатор файла, заданный в контексте этого репозитория контента».
Исходная версия
commagray,
:
У каждого сервера есть свой «content/media repository», куда складируются все загруженные файлы с присвоением уникального ID. На файловой системе это будет выглядеть как /matrix-for-yourserver.com/media/yourserver.com/some-id-of-a-file
. Клиент может загрузить файл на сервер с помощью API, даже не находясь в какой-либо комнате, в ответ получив от сервера идентификатор файла.
Когда клиент находится в какой-то комнате, он может отправить этот файл для публики в виде JSON-события, типом которого будет являться файл, а в описании будет указан идентификатор ранее загруженного файла на сервер. Такие события, вместе с обычными сообщениями и вообще всеми другими вещами, составляют DAG — линейную историю событий. Эта история событий всегда реплицируется между серверами. Каждый сервер хранит свою копию DAG комнат.
Когда в чат присоединяется новый сервер, он начинает процесс копирования истории DAG. В этой истории событий есть отправленный нами файл, поэтому новый сервер просит у старого сервера отдать ему этот файл. Этот файл копируется и на новом сервере попадает на файловую систему в виде /matrix-for-anotherserver.net/media/yourserver.com/some-id-of-a-file
.
https://matrix.org/docs/spec/server_server/r0.1.4#content-repository
https://matrix.org/docs/spec/client_server/r0.6.1#id66
То есть, MXC-ссылка является URI в виде «исходный сервер, по адресу котого нужно искать в локальном кэше скопированный репозиторий контента ИЛИ адрес сервера, у которого этот репозиторий надо запрашивать, если он отсутствует в локальном кэше» + «внутренний идентификатор файла, заданный в контексте этого репозитория контента».