Скрипты

Самая простая реализация, без /u/ и без приёма пойнтовых сообщений, выглядит так:

Сервер (использует bottle.py):

import bottle

@bottle.route('/m/')
def msg(h):
    return open('msg/%s' % h).read()

@bottle.route('/e/.')
def elist(echo,year):
    return open('echo/%s.%s' % h).read()

bottle.run(port=62220)

Сервер на php (с поддержкой /u/ и push)

<?php
$nodecode = '';
header('Content-Type: text/plain; charset=utf-8');
$q    = $_GET['q'];
$opts = explode('/', $q);
function fe($s) {
                return preg_replace("/[^a-z0-9!_.-]+/", "", $s);
}
function fm($s) {
                return preg_replace("/[^a-zA-Z0-9]+/", "", $s);
}
function getmsg($t) {
                return @file_get_contents("msg/" . fm($t));
}
function getecho($t) {
                return @file_get_contents("echo/" . fe($t));
}
function savemsg($h, $e, $t) {
                $fp = fopen('msg/' . fm($h), 'wb');
                fwrite($fp, $t);
                fclose($fp);
                $fp = fopen('echo/' . fe($e), 'ab');
                fwrite($fp, "$h\n");
                fclose($fp);
}
if (!empty($_POST['upush'])) {
                $upush    = $_POST['upush'];
                $nauth    = $_POST['nauth'];
                $echoarea = $_POST['echoarea'];
                if ($nauth!=$nodecode) {
                                die('auth error');
                }
                $lines = explode("\n", $upush);
                for ($x = 0; $x < count($lines); $x++) {
                                $a = explode(":", $lines[$x]);
                                savemsg($a[0], $echoarea, base64_decode($a[1]));
                }
} // upush
if ($opts[1]=='e') {
                echo getecho($opts[2]);
} // e
if ($opts[1]=='m') {
                echo getmsg($opts[2]);
} // m
if ($opts[1]=='u' and $opts[2]=='m') {
                for ($x = 3; $x < count($opts); $x++) {
                                $hash = base64_encode(getmsg($opts[$x]));
                                echo "$opts[$x]:$hash\n";
                }
} // um
if ($opts[1]=='u' and $opts[2]=='e') {
                for ($x = 3; $x < count($opts); $x++) {
                                echo $opts[$x] . "\n";
                                echo getecho($opts[$x]);
                }
} // ue
?>
Полноценная php нода есть на Github.

Клиент

URL='http://51t.ru/'
ECHO='ii.test.2014 ii.about.2014 ii.dev.2014'

def getf(l):
    import urllib; print l; return urllib.urlopen(URL + l).read()

def get_echoarea(name):
    try: return open('echo/%s' % name).read().splitlines()
    except: return []

def savemsg(ea,h,s):
    open('msg/%s' % h,'w').write(s)
    open('echo/%s' % ea, 'a').write(h + '\n')

for ea in ECHO.split():
    newel = getf('e/%s' % ea).splitlines()
    myel = set(get_echoarea(ea))
    for h in newel:
        if h not in myel:
            s = getf('m/%s' % h)
            savemsg(ea,h,s)

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

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