Я добавил измерения времени пинг до bitcoind, и он работает, используя "пинг" а также "понг" Команды (пинг посылает уникальный одноразовый номер, теннис повторяет, что нонс).
Я добавил время пинга в качестве дополнительного вывода на getpeerinfo. Время пинга в секундах, как десятичное число, поэтому он часто появляется как очень маленькое десятичное число со многими местами, выглядит довольно подходящим для Bitcoin
Теперь я могу видеть, в таблице подключенных сверстников, время пинга для каждого партнера. Команда пинга обрабатывается в функции нормальной обработки команды, не дан дополнительный приоритет или что-либо подобное, так что время пинга также включает в себя все время команде обработки неудовлетворенной, показывая, какие узлы сильно перегружены с помощью команд, подлежащая обработке (например, узлы пытаются догнать по blockchain синхронизации).
Я также добавил новую команду RPC, "пинг"Просить о том, что команда пинг будет разослан всем партнерам. Это в дополнение к обычному при отправке команды пинг как KeepAlive.
Он не готов к запросу тянуть еще, но взглянуть на него, это здесь:
https://github.com/Krellan/bitcoin/commit/fbc91c10d818432070ef8bac56b07707f43ef0b1
Интересные наблюдения:
1) Ссылка bitcoind посылает команды пинг с 0 (ноль) в качестве временного значения, однако, во время моего тестирования я столкнулся с другим сверстникам, которые послали мне действительные одноразовые номера (от нуля, выглядит достаточно случайным для меня). Таким образом, должны быть и другие участки, плавающие вокруг, которые также добавить действительные одноразовые номера в команду пинг?
2) Я заметил много Нонса несовпадений. При дальнейшем осмотре, есть много коллег, которые отправляют понг ответ с 0 (нолем) в качестве временного значения, независимо от того, что я послал к нему в оригинальных пингах. Интересно, что причины этого? Ссылка bitcoind не делает этого, это правильно, и это выглядит как ошибка в каком-нибудь другом клиенте.
3) В моей реализации я только следить за один выдающийся Нонс / временной метки в то время. Там ничего не мешает пользователю посылать другой пинг пока еще жду первого, чтобы закончить, хотя. Интересно, если это стоит того, чтобы усложнить реализацию с использованием вектора, так что я помню более одного временного значения / метку времени, в то время на узел, или рассмотреть только самые последние звона попытку быть только действительный пинг?
4) Я использую уникальный случайный одноразовый номер для каждого партнера, что является довольно расточительным ценной случайными числами энтропии. Возможно использовать один и тот же для всех одноразового номер сверстников в одной команде пинга, или же, что откроет другие проблемы?
5) Добавление новой команды RPC "пинг" открывает возможность для пользователя с доступом RPC, чтобы попытаться DoS остальной частью сети Bitcoin, разослав пинг команды как можно быстрее. Мне нужно это ограничение частоты. Любые предложения о том, что разумное ограничении частота будет?
6) Аналогично предыдущему, если пэр посылает мне пинг команды слишком быстро, я должен также отвечать на мои ограничения частоты понга. Любые предложения по этому поводу? Есть и другие вещи, а также, например, посылая мне несанкционированные команды понга (без соответствующего пинга). Если сверстники делают это, я должен наказать их плохое поведение () или просто молча игнорировать их?
Благодаря!
Это довольно интересная особенность, я рад об этом, и он был вдохновлен "пинги" Веб-страница в p2pool.
мистифицировать