PYTHONOMANIA
273 subscribers
195 photos
3 videos
1 file
616 links
Откройте для себя мир Python в PYTHONOMANIA!

Идеально подходит как для начинающих, так и для опытных разработчиков. Присоединяйтесь к нам, чтобы достичь совершенства в Python!

Сайт: https://pythonomania.github.io/
Download Telegram
📱Kademlia-dynamic.

Kademlia-dynamic
- это легковесная асинхронная реализация распределенной хэш-таблицы (DHT) на базе алгоритма Kademlia, написанная на чистом Python и не имеющая никаких внешних зависимостей.

В отличие от классического пакета kademlia с PyPI, данный модуль спроектирован с упором на современный asyncio (импортируется как kademlia_dynamic), работает из коробки без сторонних библиотек и поддерживает тонкую настройку параметров сети.

🔹Ключевые особенности:

🔘Чистый Python & Asyncio: Работает исключительно на стандартной библиотеке Python, обрабатывая UDP-пакеты в асинхронном режиме.

🔘Поддержка строк и бинарных данных: Методы set() и get() нативно принимают и возвращают как обычные строки (str), так и бинарные файлы (bytes).

🔘Два формата сериализации: Из коробки доступны наглядный JSON (удобен для отладки) и компактный Bencode в стиле BitTorrent (BEP 5).

🔘Защита от подмены ответов: Встроенный механизм verify_response_source сбрасывает пакеты, пришедшие с неисходных IP/портов, защищая узел от спуфинга.

🔘Умный TTL и кэширование: Время жизни закэшированных значений рассчитывается динамически и обратно пропорционально XOR-расстоянию до узла, что избавляет сеть от устаревших данных.

🔘Контроль нагрузки (Backpressure): Ограничение очереди входящих задач (max_dispatch_tasks) защищает узел от перегрузки при высоком сетевом трафике.

🚀Быстрый старт:

Установка из PyPI:

pip install kademlia-dynamic


Пример создания и запуска DHT-узла:

import asyncio
from kademlia_dynamic import KademliaServer

async def main():
# Создаем сервер (можно выбрать serialization="bencode")
server = KademliaServer(serialization="json")

# Слушаем UDP-порт (для работы в LAN/WAN можно передать ip="0.0.0.0")
await server.listen(port=8000)

# Подключаемся к существующему узлу
await server.bootstrap([("192.168.1.100", 8000)])

# Сохраняем текстовые или бинарные данные в сеть
await server.set("my_key", "Hello, P2P!")
await server.set("my_bytes", b"\x00\x01\x02\x03")

# Читаем данные из DHT
value = await server.get("my_key")
print("Результат:", value)

server.stop()

asyncio.run(main())


#Python #P2P #Kademlia #DHT #AsyncIO #Networking #OpenSource #DevTools #Decentralized

📱Ссылка на репозиторий:
https://github.com/f4rsantos/kademlia_dynamic
Please open Telegram to view this post
VIEW IN TELEGRAM
1⚡3👍31