[#] basic
51t(lenina,1) — All
2014-04-02 11:03:32


== плоское api ==

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

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

====[python]====
import bottle

@bottle.route('/m/<h:re:[a-zA-Z0-9]{20}>')
def msg(h):
return open('msg/%s' % h).read()

@bottle.route('/e/<echo:re:[a-z0-9_.!-]{60}>.<year:int>')
def elist(echo,year):
return open('echo/%s.%s' % h).read()

bottle.run(port=62220)

Клиент

====[python]====
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.

Более сложные структуры - только для большей скорости синхронизации с клиентами.