# Про IDEC
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:42


IDEC - это протокол обмена сообщениями совместимый на базовом уровне с ii. Расшифровывается, как ii-like Data Exchange Convention. Главная фишка его - это простота и возможность работать поверх чего угодно, например, ssh. Но практически все реализации сейчас работают поверх http.

Цитата из официальной документации

> Есть несколько серверов (грубо говоря, сайтов), за каждым из которых закреплены свои пользователи (поинты). Поинты пишут сообщения каждый на свой сервер. Через каждые 10-20 минут сервера скачивают друг у друга новые сообщения. В итоге на всю сеть одна общая база данных. Для установления цепочек синхронизации владельцы серверов сначала договариваются.
>
> Всё общение разделено на так называемые эхоконференции или эхи (см. терминология). Эха - это что-то вроде ленты твиттера или темы на форуме. Пользователи могут свободно подписываться на интересные им эхи и писать туда сообщения в пределах одной станции. Держатели серверов синхронизируют между собой (по общему согласию) самые популярные и нужные пользователям эхи, и сообщения оттуда расходятся по всей сети.

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

## Общение

В стандарте предусмотрена очень полезная фича, как /list.txt(это может быть на самом деле файл или путь в строке адреса в браузере). На запрос list.txt сервер возвращает нам список эх(публичных) с описанием и количеством сообщений в них. Так при первом попадании на сервер, клиент сможет сразу знать какие эхи он хочет читать.

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

Личных сообщений нет, но обсуждение стандарта идет. Можно начать с чтения этого треда.

Каждое сообщение в сети уникально, т.е. ему присвается ID сгенерированный на основе суммы sha256 от контента. Это не спасает от спама, но позволяет избежать коллизий в сети.

## Устройство сети

На протоколе IDEC чаще всего реализуют децентрализованную клиент-сервер сеть. P2P не предусмотрено, но никто не мешает написать свое расширение, которое реализует P2P обмен.

Итак, рассмотрим топологию сети от простого к сложному.

Самая простейшая сеть выглядит так:

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

Владельцы серверов договорились между собой обмениваться сообщениями эхи pipe.2032, теперь при выходе из строя одного из серверов сообщения будут доступны на другом сервере.

Добавим еще сегмент сети

У нас добавился еще один сегмент сети в котором происходит общение в эхах pipe.2032 и linux.14. Так наш первый сегмент начинает обмениваться сообщениями со вторым. Добавим еще один сегмент.

И еще

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

IDEC позволяет строить любые топологии. Клиент может выступать так же и сервером и забирать сообщения сразу со всех серверов. А простота протокола позволяет писать ботов очень быстро.

В следующей статье напишем бота, который будет слать сообщения в указанную нами эху.

Ссылка: https://difrex.lessmore.pw/post/pro-idec/