mirror of https://github.com/voidlizard/hbs2
todo/websockets.txt
This commit is contained in:
parent
d89e6d0ec5
commit
72ed3ec238
|
@ -0,0 +1,51 @@
|
||||||
|
TODO: websockets-transport
|
||||||
|
Предлагается следующее решение:
|
||||||
|
|
||||||
|
- Пир стартует и пингует/получает PEX по UDP - это, вроде бы, работает.
|
||||||
|
|
||||||
|
- Пир получает расширенную информацию о пирах --- например, путем запроса
|
||||||
|
ссылки или еще как-то (TBD), что бы не делать лишний протокол.
|
||||||
|
|
||||||
|
- В отдельном потоке пир поднимает сервер
|
||||||
|
|
||||||
|
- Сервер ведёт список список клиентов, ключом является публичный ключ
|
||||||
|
(либо же нонс - лучше нонс)
|
||||||
|
|
||||||
|
- Сервер ждёт соединений и трекает их в общем каком-то стейте
|
||||||
|
|
||||||
|
- Возможно, поднимает "пира" и использует те же самые команды,
|
||||||
|
правда в нашем случае только GetBlockChunks, используя в качестве
|
||||||
|
транспорта реаилзацию WS
|
||||||
|
|
||||||
|
- Через какое-то время после старта сервера, пир пытается поднимать
|
||||||
|
треды с ws - клиентами. Один клиент -- один пир. Проверяет, если
|
||||||
|
соединение уже установлено с сервером - то запрашивает трубу для того
|
||||||
|
соединения. "Труба" -- это реализация пира через какой-нибудь TChan
|
||||||
|
для уже имеющегося соединения.
|
||||||
|
|
||||||
|
- Если соединения нет, то пытается поднять соединение со стороны
|
||||||
|
клиента
|
||||||
|
|
||||||
|
Логика работы через WS существенно другая, полагаем, что пиры
|
||||||
|
изначально связываются по UDP/Ping/PEX.
|
||||||
|
|
||||||
|
Однако, в дальнейшем можно и бутстрап и всё прочее делать,
|
||||||
|
указывая префикс протокола ( ws://xxxx или udp:/xxxx ) в
|
||||||
|
URI пиров.
|
||||||
|
|
||||||
|
На каждого пира запускается свой поток скачивания, аналогично
|
||||||
|
UDP. Потоки отгнивают, если теряется авторизация (?), все
|
||||||
|
такое же.
|
||||||
|
|
||||||
|
Таким образом, WS пир это или тред вокруг websocket-клиента,
|
||||||
|
либо же тред вокруг трубы, торчащей из вебсокет-сервера.
|
||||||
|
|
||||||
|
Является ли проблемой, если получится одновременно установить
|
||||||
|
и клиентское, и серверное соединение?
|
||||||
|
|
||||||
|
Надо бы понять. Возможно, ничего специально делать не надо,
|
||||||
|
будет две трубы - да и пусть себе.
|
||||||
|
|
||||||
|
TBD: udp-relay
|
||||||
|
TBD: ws-relay
|
||||||
|
|
Loading…
Reference in New Issue