From 72ed3ec2386a46251eca2d81b9f2033fdc51ab81 Mon Sep 17 00:00:00 2001 From: Dmitry Zuikov Date: Sat, 1 Apr 2023 14:29:58 +0300 Subject: [PATCH] todo/websockets.txt --- docs/todo/websockets.txt | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/todo/websockets.txt diff --git a/docs/todo/websockets.txt b/docs/todo/websockets.txt new file mode 100644 index 00000000..b6934416 --- /dev/null +++ b/docs/todo/websockets.txt @@ -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 +