8个版本
新 0.2.1 | 2024年8月24日 |
---|---|
0.2.0 | 2024年8月21日 |
0.1.1 | 2024年8月20日 |
0.0.13 | 2024年8月14日 |
0.0.9 |
|
#7 在 #protoflow 中
1,314 每月下载量
用于 6 个crate(直接使用2个)
29KB
297 行
Protoflow
"万物皆流,无物常驻" —— 赫拉克利特
🚧 我们在公开建设中。目前正在进行大量施工。
🛠️ 前提条件
- Rust 1.70+
⬇️ 安装
通过Homebrew安装
brew tap AsimovPlatform/tap
brew install protoflow --HEAD
通过Cargo安装
cargo install protoflow
👉 示例
Rust示例
有关Rust示例,请参阅examples
目录。良好的起点是echo_lines
和count_lines
示例。
📚 参考
术语表
-
系统:相互连接的块集合。系统是Protoflow程序中的顶级实体。
-
块:封装的系统组件,用于处理消息。块是系统中的自主计算单元。
-
端口:块上的命名连接点,用于发送或接收消息。端口是块之间通信的唯一接口。
-
消息:在系统中的块之间流动的数据单元。消息是块处理的协议缓冲区数据包。
块
块 | 描述 |
---|---|
缓冲区 |
存储它接收到的所有消息。 |
常量 |
发送一个常量值。 |
计数 |
计算它接收到的消息数量,同时可选地将其传递通过。 |
解码 |
从字节流解码消息。 |
延迟 |
在固定或随机延迟后通过消息。 |
丢弃 |
丢弃它接收到的所有消息。 |
编码 |
将消息编码到字节流。 |
EncodeHex |
将字节流编码为十六进制形式。 |
哈希 |
计算字节流的加密哈希值。 |
随机 |
生成并发送一个随机值。 |
ReadDir |
从文件系统目录读取文件名。 |
ReadEnv |
读取环境变量的值。 |
ReadFile |
从文件的正文内容读取字节。 |
ReadStdin |
从标准输入(即stdin)读取字节。 |
WriteFile |
将或追加字节到文件的内容中。 |
WriteStderr |
将字节写入标准错误(即stderr)。 |
WriteStdout |
将字节写入标准输出(即stdout)。 |
缓冲区
一个简单地存储它接收到的所有消息的块。
block-beta
columns 4
Source space:2 Buffer
Source-- "input" -->Buffer
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Buffer block
class Source hidden
protoflow execute Buffer
常量
一个用于发送一个常量值的块。
block-beta
columns 4
Const space:2 Sink
Const-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Const block
class Sink hidden
protoflow execute Const value=Hello
计数
一个在可选地传递消息的同时计算它接收到的消息数量的块。
block-beta
columns 7
Source space:2 Count space:2 Sink
space:7
space:7
space:3 Result space:3
Source-- "input" -->Count
Count-- "output" -->Sink
Count-- "count" -->Result
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Count block
class Source hidden
class Sink hidden
class Result hidden
protoflow execute Count
解码
一个从字节流解码T
消息的块。
block-beta
columns 7
Source space:2 Decode space:2 Sink
Source-- "input" -->Decode
Decode-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Decode block
class Source hidden
class Sink hidden
protoflow execute Decode encoding=text
延迟
一个在固定或随机延迟后通过消息的块。
block-beta
columns 7
Source space:2 Delay space:2 Sink
Source-- "input" -->Delay
Delay-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Delay block
class Source hidden
class Sink hidden
protoflow execute Delay fixed=2
丢弃
一个简单地丢弃它接收到的所有消息的块。
block-beta
columns 4
Source space:2 Drop
Source-- "input" -->Drop
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Drop block
class Source hidden
protoflow execute Drop
编码
一个将T
消息编码到字节流的块。
block-beta
columns 7
Source space:2 Encode space:2 Sink
Source-- "input" -->Encode
Encode-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Encode block
class Source hidden
class Sink hidden
protoflow execute Encode encoding=text
protoflow execute Encode encoding=protobuf
EncodeHex
一个将字节流编码为十六进制形式的块。
block-beta
columns 7
Source space:2 EncodeHex space:2 Sink
Source-- "input" -->EncodeHex
EncodeHex-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class EncodeHex block
class Source hidden
class Sink hidden
protoflow execute EncodeHex
哈希
一个计算字节流的加密哈希值,同时可选地通过它的块。
block-beta
columns 7
Source space:2 Hash space:2 Sink
space:7
space:7
space:3 Result space:3
Source-- "input" -->Hash
Hash-- "output" -->Sink
Hash-- "hash" -->Result
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Hash block
class Source hidden
class Sink hidden
class Result hidden
protoflow execute Hash algorithm=blake3
随机
一个用于生成和发送随机值的块。
block-beta
columns 4
Random space:2 Sink
Random-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class Random block
class Sink hidden
protoflow execute Random seed=42
ReadDir
一个从文件系统目录读取文件名的块。
block-beta
columns 4
Config space:3
space:4
space:4
ReadDir space:2 Sink
Config-- "path" -->ReadDir
ReadDir-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class ReadDir block
class Config hidden
class Sink hidden
protoflow execute ReadDir path=/tmp
ReadEnv
一个读取环境变量值的块。
block-beta
columns 4
Config space:3
space:4
space:4
ReadEnv space:2 Sink
Config-- "name" -->ReadEnv
ReadEnv-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class ReadEnv block
class Config hidden
class Sink hidden
protoflow execute ReadEnv name=TERM
ReadFile
一个从文件的内容中读取字节的块。
block-beta
columns 4
Config space:3
space:4
space:4
ReadFile space:2 Sink
Config-- "path" -->ReadFile
ReadFile-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class ReadFile block
class Config hidden
class Sink hidden
protoflow execute ReadFile path=/tmp/file.txt
ReadStdin
一个从标准输入(即stdin)读取字节的块。
block-beta
columns 4
ReadStdin space:2 Sink
ReadStdin-- "output" -->Sink
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class ReadStdin block
class Sink hidden
protoflow execute ReadStdin < input.txt
WriteFile
一个将或追加字节到文件的内容中的块。
block-beta
columns 4
space:3 Config
space:4
space:4
Source space:2 WriteFile
Config-- "path" -->WriteFile
Source-- "input" -->WriteFile
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class WriteFile block
class Config hidden
class Source hidden
protoflow execute WriteFile path=/tmp/file.txt
WriteStderr
一个将字节写入标准错误(即stderr)的块。
block-beta
columns 4
Source space:2 WriteStderr
Source-- "input" -->WriteStderr
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class WriteStderr block
class Source hidden
protoflow execute WriteStderr < input.txt 2> output.txt
WriteStdout
一个将字节写入标准输出(即stdout)的块。
block-beta
columns 4
Source space:2 WriteStdout
Source-- "input" -->WriteStdout
classDef block height:48px,padding:8px;
classDef hidden visibility:none;
class WriteStdout block
class Source hidden
protoflow execute WriteStdout < input.txt > output.txt
👨💻 开发
git clone https://github.com/AsimovPlatform/protoflow.git
依赖关系
~1.4–2MB
~40K SLoC