HTTP/HTTPS를 통한 모든 장치 간 데이터 스트리밍

모두 안녕! 저는 DEV 커뮤니티를 처음 접했습니다. 오늘은 Unix Pipe와 브라우저용으로 만들어진 HTTP/HTTPS를 통한 거의 모든 장치 간의 데이터 스트림 전송을 소개하려고 합니다!

무엇을 해결하고 싶습니까?



때때로 Mac, Windows, Linux, Unix, iPhone, Android 간에 데이터를 전송하고 싶습니다. AirDrop, Google Drive, Dropbox, Slack, WhatsApp, Skype, netcat , ssh 등이 있지만
  • 발신자와 수신자 모두가 사용하는 공통 서비스 찾기
  • 추가 GUI 소프트웨어 설치
  • 일부 서비스 가입하기
  • NAT 순회 해결

  • 또한 거의 기존의 데이터 전송 서비스는 CUI 친화적이지 않거나 GUI 친화적이지 않습니다.

    그래서 위의 문제에 대한 해결책을 만들었습니다. 시스템에서 다음을 수행할 수 있습니다.
  • 거의 모든 장치에서 데이터 전송
  • 추가 설치 없이 사용하세요
  • Unix/Linux 파이프와 함께 사용하면 엔지니어 친화적입니다

  • 실제 사용



    제가 만든 시스템을 사용하는 방법을 소개하려고 합니다.

    다음은 전송할 데모입니다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)보기: curl https://ppng.io/myscript(Mac에서는 script -F 대신 script -f를 사용하십시오.)

    GitHub 리포지토리



    프로젝트는 아래 링크에 있는 Piping Server입니다.
    GitHub: https://github.com/nwtgck/piping-server


    nwtgck / 배관 서버


    Unix 파이프를 사용하는 모든 사람과 브라우저 사용자를 위해 설계된 순수 HTTP를 통해 모든 장치 간에 무한 전송





    배관 서버




    HTTP/HTTPS를 통해 모든 장치 간에 무한 전송

    옮기다


    배관 서버는 간단합니다. 다음과 같이 이체할 수 있습니다.
    # Send
    echo 'hello, world' | curl -T - https://ppng.io/hello
    # Get
    curl https://ppng.io/hello > hello.txt

    Piping Server transfers data to POST /hello or PUT /hello into GET /hello. The path /hello can be anything such as /mypath or /mypath/123/. A sender and receivers who specify the same path can transfer. Both the sender and the recipient can start the transfer first. The first one waits for the other.

    You can also use Web UI like https://ppng.io on your browser. A more modern UI is found in https://piping-ui.org, which supports E2E encryption.

    개울

    The most important thing is that the data are streamed. This means that you can transfer any data infinitely. The demo below transfers an infinite text stream with seq inf.

    아이디어

    This project is written in TypeScript.

    공용 서버

    Here are public servers. My recommendation is https://ppng.io because it has a short name.

    In my policy, you can freely run the servers. I'd like to describe how to run later.

    You can get engineer-friendly help from the following.

    $ 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 릴리스에서 다른 플랫폼 릴리스를 찾을 수도 있습니다. 이식 가능한 실행 파일은 zeit/pkg에서 생성됩니다.

    도커



    A docker run는 파이핑 서버를 http://localhost:8888에서 실행합니다.

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


    npm



    다음 명령은 파이핑 서버를 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 구현 간의 전송 속도에 대한 간단한 비교입니다. 영상으로 보면 거의 차이가 없는 것 같습니다.

    타입스크립트/Node.js:


    가다:


    레포고 버전: https://github.com/nwtgck/go-piping-server

    일본 우편



    여기 내 원래 일본어 게시물이 있습니다: https://qiita.com/nwtgck/items/78309fc529da7776cba0 .
    거기에서 더 많은 정보를 얻을 수 있습니다.

    읽어주셔서 대단히 감사합니다. 멋진 하루 되세요!

    좋은 웹페이지 즐겨찾기