Сейчас протокол по части поиска пользователя спроектирован по pull-модели,
т.е если кому-то нужно найти пользователя с заданным id, ноде посылается
соответствующий запрос, нода сначала ищет у себя, потом шарится по всем остальным
нодам, если искомый id находится, запрашивавшему отправляется результат поиска (искомый
id найден или не найден).
В принципе можно просто взять и заменить везде (в сообщениях протокола и в коде) 32-битный
id на открытый ключ пользователя (2048, 4096 бит или больше). Какие это может повлечть последствия -
надо подумать :)
On Wed, Aug 29, 2012 at 10:24:42PM +0300, Alexey Zakhlestin wrote:
>
> On 29.08.2012, at 21:05,
an...@picapica.im wrote:
>
> > Ну нода, к которой подключен клиент, и так о нем знает.
> > Я спросил, как другие ноды и клиенты узнают, как связаться
> > с искомым абонентом?
>
> в момент регистрации пользователя нода может рассылать другим нодам сообщение <<видела пользователя с таким-то ключом>>
>
> сценарий:
> пользователь 1 регистрируется на ноде А
> нода А сообщает об этом своим соседям: нодам Б, В, Г
> нода Г сообщает об этом своим соседям: нодам Д, Е, Ж, З [и т.д.]
> в сети регистрируется нода Ж. Её ближайший сосед -- Б
> пользователь 2 регистрирутся на ноде Ж
> пользователь 2 запрашивает у своей ноды как связаться с пользователем 1
> у ноды Ж нет этой информации (она появилась позже чем прошёл бродкаст)
> нода Ж шлёт запрос по своим соседям и сразу же получает ответ от ноды Б которая бродкаст слышала
>
>
> цикличность сообщений устраняется тем, что если нода уже видела сообщение, то она его по второму разу рассылать не будет
> у сообщения есть UUID и timestamp.
>
> в запросе информации о местоположении другого пользователя можно указать <<нужна информация обновлявшаяся не ранее чем ...>>
> это будет использоваться в случае если информация с более ранним таймстемпом уже была получена и после проверки оказалась устаревшей
>