ターミナル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受信者
送信先
受信者
送信者が開始
送信者が任意のパスにPOSTまたはPUT。サーバーは受信者を最大5分待ちます。
バイトが流れる
データがバイト単位でワイヤーをストリーミング。バッファリングゼロ。一時ファイルなし。アップロードなし。
受信者が接続
受信者が同じパスをGETしてライブストリームを取得。最大256受信者がファンアウト可能。
よく使うパイプ構成
ほとんどのレシピは2つのcurlコマンド — 1つ送信、1つ受信。
パイプを流れるもの
スクリプト実行可能でない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]?videotext/event-stream (SSE)GET観察者プログレス監視、速度/ETA/状態
/api/v1/pipe/[path]?progresstext/html(書き換え済み)PUT → GET転送前にtext/plainに書き換え — XSS防止、データは失われない
/api/v1/pipe/[path]カスタムヘッダーPUT → GETX-Hoody-Pipe、X-Pipingメタデータが転送される
/api/v1/pipe/[path]すべてのエンドポイントは/api/v1/pipe/[path]にあります。方向は誰が書き込み、誰が読むかを表します。
大容量のために構築
サーバーごとに強制されるハード制限。容量が満杯の場合はHTTP 429、パスが長すぎる場合はHTTP 414。
256
単一パスの最大受信者数
1,000
保留中の未確立接続
1,000
同時進行中のストリーム
5分
HTTP 408退去前のTTL
1,024
パスの最大文字長
50
パスごとのプログレス観察者
9エンドポイント、重要な2つのコマンド
送信はPOSTまたはPUT。受信はGET。残りはすべてオブザービリティ。
オブザービリティ & UI
{count, plural, =1 {# endpoint} other {# endpoints}'}GET /health → { status, activePipes }
データ転送
{count, plural, =1 {# endpoint} other {# endpoints}'}POSTまたはPUTで送信 · GETで受信