通过 HTTP/HTTPS 管道服务器在每个设备之间进行数据流传输

2025-06-07

通过 HTTP/HTTPS 在各个设备之间进行数据流传输

管道服务器

大家好!我是开发社区的新人。今天,我想介绍一下如何在几乎所有设备之间通过 HTTP/HTTPS 进行数据流传输,它既适用于 Unix Pipe,也适用于浏览器!

我想要解决什么问题?

我们有时想在 Mac、Windows、Linux、Unix、iPhone、Android 之间传输数据……虽然我们有 AirDrop、Google Drive、Dropbox、Slack、WhatsApp、Skypenetcatssh,但我们需要

  • 找到发送者和接收者使用的共同服务
  • 安装额外的 GUI 软件
  • 注册一些服务
  • 解决NAT穿越

此外,几乎现有的数据传输服务都不是 CUI 友好的,也不是 GUI 友好的。

因此,我针对上述问题提出了解决方案。该系统允许您

  • 几乎可以使用所有设备传输数据
  • 无需额外安装即可使用
  • 与 Unix/Linux Pipe 一起使用,对工程师来说很友好

实际用途

我想介绍一下我制作的系统如何使用。

这是一个要传输的演示seq 100000

管道序列
发送:seq 100000 | curl -T - https://ppng.io/myseq
获取:curl https://ppng.io/myseq


这是传输 100MB 文件的演示。

管道 100 MB 文件
发送:cat 100MB.dat | curl -T - https://ppng.io/mydata
获取:curl https://ppng.io/mydata > mydata


你可以使用管道传输任何数据。例如:

压缩并发送:cat myfile | gzip | curl -T ...
获取并解压缩:curl ... | zcat > myfile

加密并发送:cat myfile | openssl aes-256-cbc | curl -T ...
获取并解密:curl ... | openssl aes-256-cbc -d > myfile

发送目录(zip):zip -q -r - ./mydir | curl -T - https://ppng.io/mydir.zip
发送目录(tar.gz):tar zfcp - ./mydir | curl -T - https://ppng.io/mydir.tar.gz


这是一个将数据传输到浏览器的演示。

从 CUI 到浏览器的管道


这是一个从浏览器传输数据的演示

从浏览器到 CUI 的管道

这意味着您可以将文件从 Android/iPhone/iPad... 传输到另一台设备!


转账至多个接收者

管道多

终端屏幕共享!

管道终端共享

分享:script -f >(curl -T - https://ppng.io/myscript >&/dev/null)
查看:(在 Mac 中curl https://ppng.io/myscript
使用script -F而不是script -f

GitHub 存储库

该项目是以下链接中的 Piping Server。GitHub
https://github.com/nwtgck/piping-server

GitHub 徽标 nwtgck /管道服务器

通过纯 HTTP 管道或浏览器在每个设备之间进行无限传输

管道服务器

npm 代码因子 构建状态 GitHub Actions Docker 自动构建

通过 HTTP/HTTPS 在每个设备之间进行无限传输
管道服务器你好

转移

管道服务器很简单。您可以按照如下方式进行转移。

# Send
echo 'hello, world' | curl -T - https://ppng.io/hello
Enter fullscreen mode Exit fullscreen mode
# Get
curl https://ppng.io/hello > hello.txt
Enter fullscreen mode Exit fullscreen mode

管道服务器将数据传输到POST /hello路径可以是任意值,例如。指定相同路径的发送方和接收方可以进行传输。发送方和接收方都可以先启动传输。先启动的一方会等待另一方。PUT /helloGET /hello/hello/mypath/mypath/123/

您也可以在浏览器上使用类似https://ppng.io的 Web UI。https: //piping-ui.org提供了更现代化的 UI ,它支持 E2E 加密。

溪流

最重要的是数据是流式传输的。这意味着你可以无限地传输任何数据。下面的演示使用 传输了一个无限的文本流seq inf

无限文本流

想法

该项目是用 TypeScript 编写的。

公共服务器

这里有一些公共服务器。我推荐https://ppng.io,因为它的名字比较短。

在我的政策下,您可以自由运行服务器。稍后我会描述如何运行。

您可以从以下位置获得工程师友好的帮助。

$ curl https://ppng.io/help
<Help will be displayed here>
Enter fullscreen mode Exit fullscreen mode

工作原理

我认为 Piping Server 就像 Pear-to-Pear 中的 TURN 服务器。Piping Server 会将你的数据转发到另一台设备,以解决 NAT 穿越问题。

POST/PUT HTTP 请求的主体被传递给 GET HTTP 响应的主体。

如何运行管道服务器

我们有几种运行Piping Server的方法。我将逐一介绍。

赫罗库

在https://github.com/nwtgck/piping-server中按下 [部署到 Heroku] 按钮

可移植二进制可执行文件

以下命令使管道服务器在http://localhost:8888上运行。

wget https://github.com/nwtgck/piping-server-pkg/releases/download/v0.8.7/piping-server-macos
chmod +x piping-server-macos
./piping-server-macos --http-port=8888
Enter fullscreen mode Exit fullscreen mode

您还可以在https://github.com/nwtgck/piping-server-pkg 的GitHub Releases 中找到其他平台的版本。可移植的可执行文件由zeit/pkg生成

Docker

使docker run管道服务器在http://localhost:8888上运行。

docker run -d --restart=always -p 8888:80 nwtgck/piping-server --http-port=80
Enter fullscreen mode Exit fullscreen mode

npm

以下命令使 Piping Server 在http://localhost:8888上运行。

# install
npm install -g piping-server
# run
piping-server --http-port=8888
Enter fullscreen mode Exit fullscreen mode

通过 HTTP 传输数据的可能性

我正在进行一项实验,想知道 HTTP 能传输多少数据。
实验开始于 55 天 7 小时前,总共传输了超过 1000TB 的数据。

实验方法如下。
无限发送:cat /dev/urandom | curl -T - localhost:8888/rand
无限丢弃:curl localhost:8888/rand > /dev/null

传输速度与 Go 相比

以下是 TypeScript/Node.js 与 Go 实现之间传输速度的简单比较。从视频来看,两者之间几乎没有区别。

TypeScript/Node.js

去:

Repo Go 版本:https://github.com/nwtgck/go-piping-server

日本邮政

这是我的日语原文:https://qiita.com/nwtgck/items/78309fc529da7776cba0
你可以在那里获取更多信息。

非常感谢您的阅读。祝您拥有美好的一天!

文章来源:https://dev.to/nwtgck/data-streaming-with-every-device-over-httphttps-mo4
PREV
React、Vite 和 TypeScript:2 分钟内即可上手
NEXT
我如何在三天内成为 Scrum Master 认证 Scrum 是什么?我的流程 考试技巧 总结