コンテンツにスキップ
キット / パイプ
PipeHOODY PIPE

インターネット上の名前付きパイプ

パスにPOST。同じパスからGET。データは送信者から受信者にサーバーストレージなしで直接流れます。

パイプ · ライブ転送

ターミナルA — 送信者

$ curl -T report.pdf \

…/pipe/my-report

[INFO] 受信者を待機中...

[INFO] 1受信者へストリーミング中...

[INFO] 転送完了。

ターミナル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
レシピ

よく使うパイプ構成

ほとんどのレシピは2つのcurlコマンド — 1つ送信、1つ受信。

#1

ファイル転送

P2P配送、中間ストレージなし。

送信者 → 受信者

$ 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

ディレクトリ同期

1つのパイプラインでディレクトリツリーをパック、ストリーミング、アンパック。

送信者 → 受信者

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

# curl …/pipe/proj | tar xzf -

#5

暗号化転送

E2E暗号化 — サーバーは平文を見ません。

送信者 → 受信者

$ 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

プログレス観察(3者間)

受信者スロットを消費せずに速度、ETA、バイト数を監視。

送信者 → 受信者

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

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

kit / pipe / protocols
プロトコル & コンテンツ

パイプを流れるもの

スクリプト実行可能でないContent-Typeはそのまま流れます。危険なMIMEタイプは書き換えられますが、データは失われません。

application/octet-streamPUT → GET

バイナリファイル、アーカイブ、画像

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

ログ、stdin、設定、stdoutストリーム

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

ブラウザファイルアップロード(最初のパートのみ)

/api/v1/pipe/[path]
video/webm, video/mp4PUT → ブラウザ

スクリーン共有、録画動画

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

プログレス監視、速度/ETA/状態

/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エンドポイント、重要な2つのコマンド

送信はPOSTまたはPUT。受信はGET。残りはすべてオブザービリティ。

オブザービリティ & UI

{count, plural, =1 {# endpoint} other {# endpoints}'}

GET /health → { status, activePipes }

GET
/api/v1/pipe/healthJSON:status、version、activePipes
GET
/api/v1/pipe/versionプレーンテキストバージョン文字列
GET
/api/v1/pipe/help自己ホストcurlの例
GET
/api/v1/pipeノーコードアップロード用のブラウザWebUI
GET
/api/v1/pipe/noscriptノーJS ブラウザ用フォールバックUI
OPTIONS
/api/v1/pipe/{path}CORSプリフライト

データ転送

{count, plural, =1 {# endpoint} other {# endpoints}'}

POSTまたはPUTで送信 · GETで受信

POST
/api/v1/pipe/{path}データを送信;送信者にバック[INFO]ステータスをストリーム
PUT
/api/v1/pipe/{path}POSTの別名;curlでは-Tが自然
GET
/api/v1/pipe/{path}データを受信;送信者が接続するまでブロック
kit / pipe / cta

2つのcurlコマンドだけ

SDK不要。認証設定不要。ファイルサイズ制限なし。Pipeコンテナを起動してすぐに始められます。

ドキュメントを読む