0.3.9 |
|
---|---|
0.3.8 |
|
0.3.7 |
|
0.3.5 |
|
0.1.0 |
|
#33 in #libp2p
每月 31 次下载
80KB
2K 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
时遇到了一些困难的问题,难以确定是我的问题还是库本身的问题,最好是自行实现。
依赖项
~20MB
~467K SLoC