On Wed, Apr 24, 2013 at 01:32:12PM -0700, Tsukasa wrote:
> Мне не ясно, как осуществляется поиск подключённых клиентов. Клиент не
> отправляет никакой информации о себе после подключения, которую можно было
> бы использовать для ответа на запросы 0xA5. Ещё не очень понятно, как
> работает пересылка сообщений между клиентами.
Номер клиента содержится в сертификате клиента, в поле CommonName, в
формате номер#никнейм. При подключении клиента нода извлекает этот номер
из сертификата и запоминает у себя.
Пересылка сообщений работает в общем случае через 2 ноды, но может и
через одну, если оба клиента подключены к одной и той же ноде
http://www.linux.org.ru/news/internet/8141624?cid=8155820
Значит так, есть 3 типа соединения, обозначенные для краткости:
C2N - между клиентом и нодой для обмена служебными сообщениями (0xCA, 0x01 - 0x0A)
N2N - между нодами, сообщения 0xCB, 0x01, 0x02, 0xA0 - 0xD0
C2C - между клиентами, тунеллируемое через 1 или 2 ноды
1) сначала клиент1 отправляет 0x03 ноде к которой он подключен (нода1),
2) нода1 рассылает всем остальным нодам запрос 0xA5,
3) нода2, к которой подключен искомый клиент2 отвечает ноде1 сообщением 0xA8
4) нода1 посылает ноде2 0xAA
5) нода2 отправляет клиенту2 0x04
6) клиент2 отвечает ноде2 сообщением 0x06
7) клиент2 создает новое С2С TCP соединение к ноде2 и отправляет по нему (открытым текстом) 0x20
8) нода2 отправляет ноде1 сообщение 0xAB
9) нода1 отправляет клиенту1 0x07
10) клиент1 создает С2С TCP соединение с нодой1, отправляет по нему 0x20
11) после этого ноды считают соединение между клиентами установленным,
все, что приходит от одного клиента по C2C соединению, заворачивается в
сообщение 0xD0 и пересылается другой ноде
Вот так, всё просто :)
> Я использую фреймворк Tornado и уже сделал большую часть межсерверного
> взаимодействия. Оно даже работает :3
> Причём заняло это у меня часов 10. Не думаю, что реализацию на C можно
> сделать за такое время.
Можно посмотреть?
> Мне ещё интересно, почему в списке узлов задаётся развер пакета, а не
> количество узлов. Так было бы намного проще с точки зрения реализации.
>
Потому что адреса узлов могут быть разных форматов и переменной длины в
случае DNS
> среда, 24 апреля 2013 г., 20:36:38 UTC+3 пользователь Anton написал:
> >
> >
> >
> > Это и есть полное описание всех пакетов протокола,
> > если речь идет о
> >
https://github.com/antonsviridenko/pica-pica/blob/master/doc/proto.txt
> >
> > Где, когда и в какой последовательности отправлять эти пакеты,
> > можно почитать вот здесь
> >
http://picapica.im/vkr.pdf
> > но там информация малость устаревшая, кое-что с тех пор поменялось.
> > Какие конкретно вопросы по части реализации возникли?
> > Вы хотите сделать новую реализацию ноды? На каком языке?
> > Почему бы не присоединиться к разработке существующей реализации? :)
> >
> >
> > On Wed, Apr 24, 2013 at 04:23:21AM -0700, Tsukasa wrote:
> >
> > > Хотелось бы получить полную спецификацию протокола, ибо того, что лежит
> > на
> > > GitHub, не хватает для полной реализации ноды.
> > >
> > > --
> > > Вы получили это сообщение, поскольку подписаны на группу Pica Pica
> > Development (Russian).
> > >
> > > Чтобы отказаться от подписки на эту группу и перестать получать из нее
> > сообщения, отправьте электронное письмо на адрес
> >
pica-pica-developm...@googlegroups.com <javascript:>.
> > > Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу
> >
pica-pica-de...@googlegroups.com <javascript:>.
> --
> Вы получили это сообщение, поскольку подписаны на группу Pica Pica Development (Russian).
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес
pica-pica-developm...@googlegroups.com.