跳转到主要内容

libp2p: libp2p网络栈的Python实现

项目描述

py-libp2p

Join the chat at https://gitter.im/py-libp2p/Lobby Build Status PyPI version Python versions Docs build Freenode Matrix Discord

py-libp2p hex logo

警告

py-libp2p是一个正在开发中的实验性仓库,仍在开发中。我们目前不建议在生产环境中使用py-libp2p。目前,CI已关闭tests_interop,许多tests测试失败。WIP。

libp2p网络栈的Python实现

更多内容请参阅ReadTheDocs上的文档。查看发行说明

维护者

目前由@pacrob@dhuseby维护,寻求协助!

请注意,tests/core/test_libp2p/test_libp2p.py中包含两个libp2p主机之间的端到端消息测试,这是我们概念证明的主要部分。

功能分解

py-libp2p旨在与标准libp2p模块保持一致。以下是我们已经开发、正在开发以及未来可能开发的模块分解。

说明::green_apple: 完成   :lemon: 进行中   :tomato: 缺失   :chestnut: 未计划

libp2p节点 状态
libp2p :green_apple
标识协议 状态
标识 :lemon
传输协议 状态
TCP :green_apple
UDP :tomato
WebSockets :chestnut
UTP :chestnut
WebRTC :chestnut
SCTP :chestnut
Tor :chestnut
i2p :chestnut
cjdns :chestnut
蓝牙LE :chestnut
音频TP :chestnut
Zerotier :chestnut
QUIC :chestnut
流复用器 状态
multiplex :green_apple
yamux :tomato
benchmarks :chestnut
muxado :chestnut
spdystream :chestnut
spdy :chestnut
http2 :chestnut
QUIC :chestnut
协议复用器 状态
multiselect :green_apple
交换机(Swarm) 状态
交换机 :green_apple
拨号堆栈 :green_apple
对等发现 状态
引导列表 :tomato
Kademlia DHT :chestnut
mDNS :chestnut
PEX :chestnut
DNS :chestnut
内容路由 状态
Kademlia DHT :chestnut
floodsub :green_apple
gossipsub :green_apple
PHT :chestnut
对等路由 状态
Kademlia DHT :chestnut
floodsub :green_apple
gossipsub :green_apple
PHT :chestnut
NAT穿越 状态
nat-pmp :chestnut
upnp :chestnut
外部地址发现 :chestnut
STUN-like :chestnut
线路交换中继 :chestnut
数据包交换中继 :chestnut
交换 状态
HTTP :chestnut
Bitswap :chestnut
Bittorrent :chestnut
共识 状态
Paxos :chestnut
Raft :chestnut
PBTF :chestnut
Nakamoto :chestnut

基本两节点通信说明

核心概念

(非规范性,适用于团队笔记,非参考)

libp2p堆栈的几个组件在建立两个节点之间的连接时参与其中

  1. 主机:libp2p网络中的一个节点。
  2. 连接:libp2p网络中两个节点之间的第三层连接。
  3. 传输:创建连接的组件,例如TCP、UDP、QUIC等。
  4. :在连接之上表示不同主题的并行对话的抽象,每个对话都由一个协议ID标识。通过复用器连接之上分层多个流。
  5. 复用器:负责将发送到流上的消息包裹在一个标识该流的外壳中,通常通过ID。另一个复用器解包消息并根据流标识将其内部路由。
  6. 安全通道:可选地在连接之上建立安全、加密和认证的通道。
  7. 升级器:一个组件,它从传输返回的原始第三层连接中提取,并执行安全和复用协商,以在可以打开的上面建立安全、复用的通道。

主机X和Y之间的通信

(非规范性,适用于团队笔记,非参考)

发起连接:主机是libp2p网络中能够与其他节点通信的节点。为了使X和Y能够相互通信,必须有一个主机发起连接。假设X将发起连接。X首先打开到Y的连接。所有实际通信都将在该连接上进行。

通过单一连接使用多种协议进行通信:X 和 Y 可以使用不同的协议通过相同的连接进行通信,多路复用器将根据特定协议的消息适当地路由到该协议的特定处理函数,从而允许每个主机使用不同的函数处理不同的协议。此外,我们可以为给定的协议使用多个流,使得相同的协议和相同的底层连接可以用于节点 X 和 Y 之间关于不同主题的通信。

为什么使用多个流?:使用相同连接进行多个流的目的是为了避免在 X 和 Y 之间有多个连接的开销。为了使 X 和 Y 能够区分不同流和不同协议上的消息,使用多路复用器在发送消息时对消息进行编码,在接收到消息时对消息进行解码。多路复用器通过在要发送的任何消息的开头添加一个包含流 ID(以及一些其他信息)的头部来对消息进行编码。然后,消息通过原始连接发送,接收主机将使用其多路复用器对消息进行解码,即确定消息应被路由到哪个流 ID。

项目详情


下载文件

下载您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分发

libp2p-0.2.0.tar.gz (183.4 kB 查看哈希值)

上传时间

构建分发

libp2p-0.2.0-py3-none-any.whl (142.2 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面