我对这个任务很迷茫。我们应该使用 kademlia 创建 3 个 python 文件。这两个文件是节点,然后第三个是一组查询 DHT 应用程序。我们还获得了一个 CSV 文件,我们必须将其导入并将数据发送到 DHT 网络。 任何帮助将不胜感激!!! 这是作业:
您首先需要创建一个初始起始节点(参见下面的代码)。这将在您的本地系统上的端口 8468 上启动。
# Modified from: https://kademlia.readthedocs.io/en/latest/intro.html
import logging
import asyncio
from kademlia.network import Server
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)
loop = asyncio.get_event_loop()
loop.set_debug(True)
server = Server()
loop.run_until_complete(server.listen(8468))
try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
server.stop()
loop.close()
接下来,您需要在端口 8469 上启动 DHT 应用程序的另一个本地节点(参见下面的代码)。
# Modified from: https://kademlia.readthedocs.io/en/latest/intro.html
import logging
import asyncio
from kademlia.network import Server
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)
bootstrap_node = ("localhost", int("8468"))
loop = asyncio.get_event_loop()
loop.set_debug(True)
server = Server()
loop.run_until_complete(server.listen(8469))
loop.run_until_complete(server.bootstrap([bootstrap_node]))
try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
server.stop()
loop.close()
最后,以下代码将允许您查询 DHT 应用程序并添加键/值对(见下文)。
# Modified from: https://kademlia.readthedocs.io/en/latest/querying.html
import logging
import asyncio
from kademlia.network import Server
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)
async def run():
server = Server()
await server.listen(8470)
bootstrap_node = ("localhost", int("8469"))
await server.bootstrap([bootstrap_node])
await server.set("myKey2", "myValue2")
result = await server.get("myKey2")
print("Get result:", result)
server.stop()
asyncio.run(run())
现在您已经有了两个节点的代码以及设置和查询 DHT 应用程序的代码,使用 DHT_Data.csv 文件编写一个 Python 程序来导入 CSV 文件并将该数据发送到 DHT 网络。此外,编写一些代码来获取 DHT_Data.csv 文件中的键列表并查询 DHT 应用程序以显示您可以查询和返回值。
这是 CSV 文件的屏幕截图: DHT_Data.csv
以下是我的代码截图: