UDPeer(you-dee-peer)는 webrtc 개발자와 다양한 기타 멋진 Nodejs 기여자들의 노고를 바탕으로 구축된 간단한 UDP 피어 2 피어 통신 프레임워크입니다.
기본 아이디어는 다음과 같습니다.
두 시스템이 NAT 및 방화벽을 통해 WebRTC를 통해 통신할 수 있다면 UDP 패킷도 교환할 수 있어야 합니다. 이것이 바로 이 프로젝트의 전부입니다. UDPeer는 양방향 UDP 채널을 제공하기 위해 양쪽에서 실행되는 간단한 UDP 프록시입니다.
이 프록시는 클라이언트와 서버가 공용 인터넷을 사용하여 webRTC를 통해 통신할 수 있는 경우에만 작동합니다. 일반적으로 인터넷에 연결되어 있는 한 아무 문제 없이 작동하지만 확인을 위해 https://simplewebrtc.com/demo.html과 같은 다양한 사이트에서 테스트할 수도 있습니다.
정말 간단합니다.
npm install -g udpeer
클라이언트 측과 서버 측에서 별도의 udpeer 프록시 인스턴스를 실행해야 합니다. 그들은 방화벽을 통과하는 WebRTC를 사용하여 서로 통신 채널을 설정합니다. webrtc에는 간단한 웹소켓 기반 서버인 Signalhub(https://github.com/mafintosh/signalhub)를 사용하여 수행되는 노드 간 신호 전달이 필요합니다. 이상적으로는 자체 신호 서버를 설정하고 거기에 URL을 지정해야 합니다.
프록시가 통신 채널을 설정하면 localhost에 UDP 로컬 포트가 노출됩니다. 클라이언트와 서버 프로그램은 서로 통신하는 대신 이러한 로컬 포트와 통신합니다.
+--------+ +--------+ | | | | +----------+ | | WEBRTC | | +----------+ | Client +----+ Node 1 +----------------------------+ Node 2 +------+ Server | +----------+ | | ^ | +----------+ | | | | | | | | +----+---+ +----+---+ | +-----------+ | | | || | +------------+ SIGNALHUB|-------------+ WebSocket| || Websocket +-----------+
두 당사자 간의 고유한 공통 채널 이름에 동의합니다. 그것은 단순히 큰 문자열입니다. 확실하지 않은 경우 채널 이름 없이 UDPeer를 실행하면 채널 이름이 생성됩니다. 이것을 상대방에게 전달하세요. 각 머신에 하나의 프록시 UDP 포트를 할당합니다. 이를 클라이언트 프록시 포트(CProxy) 및 서버 프록시 포트(SProxy)라고 부르겠습니다.
그게 다야. 두 시스템 모두에 UDPeer를 설치하십시오.
npm install -g udpeer
클라이언트 측에서
udpeer -i -c channelId -p CProxy:C
서버 측에서
udpeer -c Ourchannel -p SProxy:S
용법
Usage:
udpeer [-i] [--channel=channelID] --ports=proxy:client
-i --init = should be true only for initiator of the connection (only one of the two parties)
-m --my = A unique node name for your machine, if you want to override
-c --channel = The channel where two nodes will communicate. Must be unique
If you don't specify, it will be generated, which needs to be shared with your peer.
-s --signal = Your own private signaling URLs, seperated by comma. e.g. https://url.com,https://url2.com
-p --ports = The local ports in the form proxy:local
-l --localhost = Localhost IP (127.0.0.1 by default)
-v --version = Version
-h --help = print this message
Example. Machine 1
udpeer -cFQBLA7?H8N5ZHP65 -p 5000:5001
At Machine 2 (As initiator)
udpeer -i -cFQBLA7?H8N5ZHP65 -p 6000:6001
모든 것이 잘 작동하면 잠시 후 서버와 클라이언트 프록시가 webrtc를 통해 연결되고 콘솔에 메시지가 표시됩니다.
##클라이언트 구성 수정
프록시가 설정되면 클라이언트 설정에서 서버 IP 주소를 변경하여 원격 주소 대신 로컬 호스트 프록시 포트와 통신할 수 있습니다.
예를 들어 클라이언트의 서버 구성이 12.131.121.14:3456인 경우 0.0.0.0:7890이 됩니다(이전 예에서 CProxy로 7890을 선택한 경우).
*내 클라이언트가 통신에 고정 소스 포트를 사용하지 않으면 어떻게 되나요? 걱정하지 마십시오. 우리는 이 문제를 해결했습니다. 클라이언트가 프록시에 연결되자마자 프록시는 클라이언트 소스 포트를 저장하고 다음번에도 동일한 응답을 보냅니다.
참고: 현재 코드는 통신을 암호화하지 않습니다. 자기 책임하에 사용해 주십시오. 기본 포트 보안과 관련하여 IT 직원이 제공한 지침을 따르십시오.
##WebRTC로 인한 충돌
Ubuntu의 webrtc 패키지에서 일부 충돌을 방지하기 위해 Ubuntu/debian 패키지의 전제 조건은 다음과 같습니다. 이는 UDPeer가 아닌 Node.js webrtc 패키지에 대한 종속성입니다. 한번 시도해 보십시오 sudo apt-get install python2.7 git-all pkg-config libncurses5-dev libssl-dev libnss3-dev libexpat-dev
이번 패키지는 고객님들의 노고가 있었기에 가능했습니다
https://github.com/mafintosh/signalhub https://github.com/js-platform/node-webrtc