23 个版本
0.6.1 | 2024年6月13日 |
---|---|
0.5.0-alpha.1 | 2023年5月6日 |
0.4.2 | 2022年12月29日 |
0.4.1 | 2022年7月29日 |
0.2.0-alpha.1 |
|
#80 在 网络编程
3,157 每月下载量
用于 20 个 Crates (6 个直接使用)
765KB
19K SLoC
Tentacle
概述
这是一个基于 yamux 的最小化多路复用 p2p 网络实现,支持挂载自定义协议。
架构
- 数据流传输
+----+ +----------------+ +-----------+ +-------------+ +----------+ +------+
|user| <--> | custom streams | <--> |Yamux frame| <--> |Secure stream| <--> |TCP stream| <--> |remote|
+----+ +----------------+ +-----------+ +-------------+ +----------+ +------+
- 代码实现
所有数据都通过 futures 通道传递,yamux
将实际的 tcp/websocket 流分割成多个子流,服务层将 yamux 子流包装成协议流。
注意:与
libp2p
不兼容。
状态
此项目的 API 基本可用。但我们仍然需要更多的测试。欢迎 PR。
目录 protocols/
中的代码不再维护,仅用作参考
用法
从 cargo
[dependencies]
tentacle = { version = "0.4.0" }
示例
- 克隆
$ git clone https://github.com/nervosnetwork/tentacle.git
- 在一个终端
监听 127.0.0.1:1337
$ RUST_LOG=simple=info,tentacle=debug cargo run --example simple --features ws -- server
- 在另一个终端
$ RUST_LOG=simple=info,tentacle=debug cargo run --example simple
- 现在你可以在终端上看到一些数据交互信息。
你可以在这些三个仓库中看到更详细的示例
在浏览器上运行并测试
- 设置 ws 服务器
$ cd tentacle && RUST_LOG=info cargo run --example simple --features ws -- server
- 设置浏览器客户端
$ cd simple_wasm/www && wasm-pack build
$ npm install && npm run start
所有 wasm 代码生成自 书
-
使用浏览器访问 https://127.0.0.1:8080/
-
现在你可以在服务器工作台或浏览器控制台中看到连接。
其他语言
其他语言的实现
为什么?
因为我使用 rust-libp2p
时遇到了一些难题,难以确定是问题出在我自己还是库本身,最好是自行实现。
依赖
~10–30MB
~395K SLoC