通过 HTTP/HTTPS 在各个设备之间进行数据流传输
管道服务器
大家好!我是开发社区的新人。今天,我想介绍一下如何在几乎所有设备之间通过 HTTP/HTTPS 进行数据流传输,它既适用于 Unix Pipe,也适用于浏览器!
我想要解决什么问题?
我们有时想在 Mac、Windows、Linux、Unix、iPhone、Android 之间传输数据……虽然我们有 AirDrop、Google Drive、Dropbox、Slack、WhatsApp、Skypenetcat
等ssh
,但我们需要
- 找到发送者和接收者使用的共同服务
- 安装额外的 GUI 软件
- 注册一些服务
- 解决NAT穿越
此外,几乎现有的数据传输服务都不是 CUI 友好的,也不是 GUI 友好的。
因此,我针对上述问题提出了解决方案。该系统允许您
- 几乎可以使用所有设备传输数据
- 无需额外安装即可使用
- 与 Unix/Linux Pipe 一起使用,对工程师来说很友好
实际用途
我想介绍一下我制作的系统如何使用。
这是一个要传输的演示seq 100000
。

发送:seq 100000 | curl -T - https://ppng.io/myseq
获取:curl https://ppng.io/myseq
这是传输 100MB 文件的演示。

发送: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
这是一个将数据传输到浏览器的演示。

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

这意味着您可以将文件从 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
通过纯 HTTP 管道或浏览器在每个设备之间进行无限传输
管道服务器

通过 HTTP/HTTPS 在每个设备之间进行无限传输

转移
管道服务器很简单。您可以按照如下方式进行转移。
# Send
echo 'hello, world' | curl -T - https://ppng.io/hello
# Get
curl https://ppng.io/hello > hello.txt
管道服务器将数据传输到或POST /hello
。路径可以是任意值,例如或。指定相同路径的发送方和接收方可以进行传输。发送方和接收方都可以先启动传输。先启动的一方会等待另一方。PUT /hello
GET /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>
工作原理
我认为 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
您还可以在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
npm
以下命令使 Piping Server 在http://localhost:8888上运行。
# install
npm install -g piping-server
# run
piping-server --http-port=8888
通过 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