UDPeer (you-dee-peer) é uma estrutura simples de comunicação UDP peer 2 peer, construída com base no trabalho árduo feito por desenvolvedores webrtc e vários outros contribuidores incríveis do Nodejs.
A ideia básica é a seguinte:
Se duas máquinas pudessem se comunicar via WebRTC sobre NAT e firewalls, elas também deveriam ser capazes de trocar pacotes UDP. É disso que se trata este projeto. UDPeer é um proxy UDP simples executado em ambos os lados para fornecer um canal UDP bidirecional.
Este proxy só funcionará se o seu cliente e servidor puderem se comunicar via webRTC usando Internet pública. Normalmente funciona sem problemas desde que você tenha conexões de saída com a Internet, mas apenas para verificar você também pode testar isso em vários sites como https://simplewebrtc.com/demo.html
Muito simples.
npm install -g udpeer
Você precisará executar instâncias separadas do proxy udpeer no lado do cliente e do servidor. Eles estabelecerão um canal de comunicação entre si usando WebRTC, que atravessa firewalls. webrtc requer sinalização entre nós, o que é feito usando Signalhub (https://github.com/mafintosh/signalhub) um servidor simples baseado em websocket. Idealmente, você deve configurar seu próprio servidor de sinalização e especificar a URL lá.
Assim que os proxies estabelecerem um canal de comunicação, eles exporão uma porta local UDP no host local. Os programas cliente e servidor se comunicarão com essas portas locais em vez de se comunicarem entre si.
+--------+ +--------+ | | | | +----------+ | | WEBRTC | | +----------+ | Client +----+ Node 1 +----------------------------+ Node 2 +------+ Server | +----------+ | | ^ | +----------+ | | | | | | | | +----+---+ +----+---+ | +-----------+ | | | || | +------------+ SIGNALHUB|-------------+ WebSocket| || Websocket +-----------+
Combine um nome de canal comum exclusivo entre duas partes. É simplesmente uma corda grande. Se não tiver certeza, execute o UDPeer sem nome de canal e ele gerará um para você. Passe isso para outra parte. Aloque uma porta proxy UDP em cada máquina. Vamos chamá-la de porta proxy do cliente (CProxy) e porta proxy do servidor (SProxy).
É isso. Instale o UDPeer em ambas as máquinas.
npm install -g udpeer
Do lado do cliente
udpeer -i -c channelId -p CProxy:C
No lado do servidor
udpeer -c Ourchannel -p SProxy:S
Uso
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
Se tudo funcionar bem, depois de um tempo o servidor e o proxy do cliente se conectarão via webrtc e você verá uma mensagem no console.
##Modificando a configuração do cliente
Depois que o proxy estiver configurado, você poderá alterar os endereços IP do servidor nas configurações do cliente para se comunicar com portas proxy do host local em vez de endereços remotos.
Por exemplo, se a configuração do seu servidor no cliente for 12.131.121.14:3456, então ela se tornará 0.0.0.0:7890 (se você escolheu 7890 como CProxy no exemplo anterior)
*E se meu cliente não usar porta de origem fixa para comunicação? Não se preocupe, nós cuidamos disso. Assim que o cliente se conectar ao proxy, o proxy salvará a porta de origem do cliente e responderá da mesma forma na próxima vez.
Nota: O código atual não criptografa a comunicação. Por favor, use por sua própria conta e risco. Siga todas as diretrizes fornecidas pela sua equipe de TI em relação à segurança portuária básica.
##Falha devido ao WebRTC
Para evitar alguns travamentos no pacote webrtc no Ubuntu, a seguir estão os pré-requisitos nos pacotes Ubuntu/debian. Observe que essas são dependências do pacote webrtc Node.js, não do UDPeer diretamente. Por favor, experimente sudo apt-get install python2.7 git-all pkg-config libncurses5-dev libssl-dev libnss3-dev libexpat-dev
Este pacote é possível graças ao trabalho árduo de
https://github.com/mafintosh/signalhub https://github.com/js-platform/node-webrtc