#p2p #protocols #stream #yamux #data-stream #framework

tentacle

最小化实现的基于 yamux 的多路复用 p2p 网络框架

23 个版本

0.6.1 2024年6月13日
0.5.0-alpha.12023年5月6日
0.4.2 2022年12月29日
0.4.1 2022年7月29日
0.2.0-alpha.1 2019年3月14日

#80网络编程

Download history 236/week @ 2024-04-29 593/week @ 2024-05-06 333/week @ 2024-05-13 295/week @ 2024-05-20 137/week @ 2024-05-27 241/week @ 2024-06-03 524/week @ 2024-06-10 874/week @ 2024-06-17 625/week @ 2024-06-24 194/week @ 2024-07-01 196/week @ 2024-07-08 685/week @ 2024-07-15 557/week @ 2024-07-22 708/week @ 2024-07-29 484/week @ 2024-08-05 1367/week @ 2024-08-12

3,157 每月下载量
用于 20 个 Crates (6 个直接使用)

MIT 许可证

765KB
19K SLoC

Tentacle

Build Status image

概述

这是一个基于 yamux 的最小化多路复用 p2p 网络实现,支持挂载自定义协议。

架构

  1. 数据流传输
+----+      +----------------+      +-----------+      +-------------+      +----------+      +------+
|user| <--> | custom streams | <--> |Yamux frame| <--> |Secure stream| <--> |TCP stream| <--> |remote|
+----+      +----------------+      +-----------+      +-------------+      +----------+      +------+
  1. 代码实现

所有数据都通过 futures 通道传递,yamux 将实际的 tcp/websocket 流分割成多个子流,服务层将 yamux 子流包装成协议流。

详细介绍: 中文/English

注意:与 libp2p 不兼容。

状态

此项目的 API 基本可用。但我们仍然需要更多的测试。欢迎 PR。

目录 protocols/ 中的代码不再维护,仅用作参考

用法

从 cargo

[dependencies]
tentacle = { version = "0.4.0" }

示例

  1. 克隆
$ git clone https://github.com/nervosnetwork/tentacle.git
  1. 在一个终端

监听 127.0.0.1:1337

$ RUST_LOG=simple=info,tentacle=debug cargo run --example simple --features ws -- server
  1. 在另一个终端
$ RUST_LOG=simple=info,tentacle=debug cargo run --example simple
  1. 现在你可以在终端上看到一些数据交互信息。

你可以在这些三个仓库中看到更详细的示例

在浏览器上运行并测试

  1. 设置 ws 服务器
$ cd tentacle && RUST_LOG=info cargo run --example simple --features ws -- server
  1. 设置浏览器客户端
$ cd simple_wasm/www && wasm-pack build
$ npm install && npm run start

所有 wasm 代码生成自

  1. 使用浏览器访问 https://127.0.0.1:8080/

  2. 现在你可以在服务器工作台或浏览器控制台中看到连接。

其他语言

其他语言的实现

为什么?

因为我使用 rust-libp2p 时遇到了一些难题,难以确定是问题出在我自己还是库本身,最好是自行实现。

依赖

~10–30MB
~395K SLoC