6 个版本

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 2024年7月28日

#181 in 并发

Download history 131/week @ 2024-07-12 629/week @ 2024-07-19 338/week @ 2024-07-26 112/week @ 2024-08-02 257/week @ 2024-08-09 454/week @ 2024-08-16

1,308 个月下载量
用于 3 个 Crates (通过 asimov-sdk)

无许可证

145KB
2.5K SLoC

Protoflow

License Compatibility Package

"一切皆流,无物常驻" — 赫拉克利特

🚧 我们在公开建设中。目前正在施工。

🛠️ 前置条件

⬇️ 安装

通过 Homebrew 安装

brew tap AsimovPlatform/tap
brew install protoflow --HEAD

通过 Cargo 安装

cargo install protoflow

👉 示例

Rust 示例

有关 Rust 示例,请参阅 examples 目录。良好的起点是 echo_linescount_lines 示例。

📚 参考

术语表

  • 系统:连接在一起的块的集合。系统是 Protoflow 程序中的顶级实体。

  • :封装的消息处理系统组件。块是系统中的计算自主单元。

  • 端口:块上的命名连接点,用于发送或接收消息。端口是块之间通信的唯一接口。

  • 消息:在系统中的块之间流动的数据单元。消息是块处理的 Protocol Buffers 数据包。

描述
缓冲区 存储它接收到的所有消息。
常量 发送一个常量值。
计数 计算它接收到的消息数量,同时可选地传递它们。
解码 从字节流中解码消息。
延迟 在固定或随机延迟期间传递消息。
丢弃 丢弃它接收到的所有消息。
编码 将消息编码到字节流中。
编码十六进制 将字节流编码为十六进制形式。
哈希 计算字节流的加密哈希。
随机 生成并发送一个随机值。
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

编码十六进制

一个将字节流编码成十六进制形式的块。

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

Share on Twitter Share on Reddit Share on Hacker News Share on Facebook

依赖关系

~3–15MB
~191K SLoC