跳转到内容
套件 / Pipe
PipeHOODY PIPE

互联网上的命名管道

POST 到一个路径,GET 同一路径。数据直接从发送方流向接收方——无缓冲、无上传、无存储,只需 HTTP。

pipe · 实时传输

终端 A — 发送端

$ curl -T report.pdf \

…/pipe/my-report

[信息] 等待接收端...

[信息] 正在流传到 1 个接收端...

[信息] 传输完成。

终端 B — 接收端

$ curl \

…/pipe/my-report

-o report.pdf

% Total report.pdf

100 2.4M 100 2.4M 0 0 1.8M

零存储·实时流传·最多 256 个接收端·5 分钟 TTL
kit / pipe / how-it-works
工作原理

数据穿流而过,而非留存其中

每一个字节实时到达接收方。服务器是一根导线,不是仓库。

来源

发送端

PUT / POST/pipe/{path}

管道服务器

零存储 · 最多 256 接收方

GET/pipe/{path}

接收方

接收端

01

发送方建立连接

发送方通过 POST 或 PUT 请求任意路径。服务器等待接收方连接——最长等待 5 分钟。

02

字节逐字节传输

数据逐字节流经网络,零缓冲,无临时文件,无上传步骤。

03

接收方接入

接收方 GET 同一路径即可拉取实时流。单个发送方最多可扇出至 256 个接收方。

kit / pipe / recipes
使用示例

常见管道组合

大多数示例只需两条 curl 命令——一条发送,一条接收。

#1

文件传输

点对点交付,无中间存储。

发送端 → 接收端

$ curl -T report.pdf …/pipe/report

# curl …/pipe/report -o report.pdf

#2

实时日志流

从任意终端实时追踪容器日志。

发送端 → 接收端

$ tail -f app.log | curl -T - …/pipe/logs

# curl …/pipe/logs

#3

屏幕共享

向最多 10 名观众流式传输桌面画面,无需 WebRTC。

发送端 → 接收端

$ ffmpeg … | curl -T - …/pipe/screen?n=10

# browser: …/pipe/screen?n=10&video

#4

目录同步

打包、流传输并在单条管道中解压目录树。

发送端 → 接收端

$ tar czf - ./project | curl -T - …/pipe/proj

# curl …/pipe/proj | tar xzf -

#5

加密传输

端对端加密——服务器永远看不到明文。

发送端 → 接收端

$ openssl enc … < secret.doc | curl -T - …/pipe/enc

# curl …/pipe/enc | openssl enc -d …

#6

扇出广播

同时将构建产物分发给恰好 3 个消费方。

发送端 → 接收端

$ curl -T build.zip …/pipe/release?n=3

# curl …/pipe/release?n=3 (×3 receivers)

#7

进度观察(三方)

监控速度、预计时间和字节数,且不占用接收方槽位。

发送端 → 接收端

$ curl -T dataset.tar.gz …/pipe/ds (sender)

# curl …/pipe/ds + browser: …/pipe/ds?progress

kit / pipe / protocols
协议与内容

哪些内容可以流过管道

任何非可执行脚本的 Content-Type 都会原样透传。危险的 MIME 类型会被重写为 text/plain——数据不会丢失,XSS 得到防止。

application/octet-streamPUT → GET

二进制文件、压缩包、图片

/api/v1/pipe/[path]
text/plainPOST → GET

日志、stdin、配置、stdout 流

/api/v1/pipe/[path]
multipart/form-dataPOST → GET

浏览器文件上传(仅首个 part)

/api/v1/pipe/[path]
video/webm, video/mp4PUT → 浏览器

屏幕共享、录制视频

/api/v1/pipe/[path]?video
text/event-stream (SSE)GET 观察方

进度监控、速度/预计时间/状态

/api/v1/pipe/[path]?progress
text/html(已重写)PUT → GET

转发前重写为 text/plain——防止 XSS,数据不丢失

/api/v1/pipe/[path]
自定义请求头PUT → GET

X-Hoody-Pipe、X-Piping 元数据透传

/api/v1/pipe/[path]

所有接口均位于 /api/v1/pipe/[path]。方向说明谁写入、谁读取。

kit / pipe / limits
限制

专为高吞吐构建

每台服务器强制执行硬性限制。容量满时返回 HTTP 429,路径过长时返回 HTTP 414。

#1

256

单路径最大接收方数

#2

1,000

待建立的未连接连接数

#3

1,000

同时进行中的流数

#4

5 分钟

触发 HTTP 408 驱逐的 TTL

#5

1,024

路径最大字符长度

#6

50

每路径进度观察方数

kit / pipe / endpoints
API

9 个接口,两条最关键的命令

POST 或 PUT 发送,GET 接收,其余均为可观测性接口。

可观测性与 UI

{count, plural, =1 {# 个端点} other {# 个端点}'}

GET /health → { 状态, 活跃 Pipe 数 }

GET
/api/v1/pipe/healthJSON:状态、版本、活跃 Pipe 数
GET
/api/v1/pipe/version纯文本版本字符串
GET
/api/v1/pipe/help自托管 curl 示例
GET
/api/v1/pipe浏览器网页 UI(无代码上传)
GET
/api/v1/pipe/noscript无 JS 浏览器的后备 UI
OPTIONS
/api/v1/pipe/{path}CORS 预检请求

数据传输

{count, plural, =1 {# 个端点} other {# 个端点}'}

POST 或 PUT 发送 · GET 接收

POST
/api/v1/pipe/{path}发送数据;将 [信息] 状态流传回发送端
PUT
/api/v1/pipe/{path}POST 的别名;对 curl -T file 更自然
GET
/api/v1/pipe/{path}接收数据;阻塞直到发送端连接
kit / pipe / cta

只需两条 curl 命令

无 SDK,无认证配置,无文件大小限制。启动一个 Pipe 容器,立即开始传输。

阅读文档