UDPeer (you-dee-peer) es un marco de comunicación UDP entre pares simple, construido sobre el arduo trabajo realizado por los desarrolladores webrtc y varios otros increíbles contribuyentes de Nodejs.
La idea básica es la siguiente:
Si dos máquinas pudieran comunicarse a través de WebRTC a través de NAT y firewalls, también deberían poder intercambiar paquetes UDP. De esto se trata este proyecto. UDPeer es un proxy UDP simple que se ejecuta en ambos lados para proporcionar un canal UDP bidireccional.
Este proxy solo funcionará si su cliente y servidor pueden comunicarse a través de webRTC utilizando Internet público. Por lo general, funciona sin ningún problema siempre que tenga conexiones salientes a Internet, pero solo para verificar, también puede probarlo en varios sitios como https://simplewebrtc.com/demo.html
Realmente simple.
npm install -g udpeer
Deberá ejecutar instancias separadas de udpeer proxy en el lado del cliente y del servidor. Establecerán un canal de comunicación entre sí mediante WebRTC que atraviesa los firewalls. webrtc requiere señalización entre nodos, que se realiza utilizando Signalhub (https://github.com/mafintosh/signalhub), un servidor simple basado en websocket. Lo ideal sería configurar su propio servidor de señalización y especificar la URL allí.
Una vez que los servidores proxy establezcan un canal de comunicación, expondrán un puerto local UDP en localhost. Los programas cliente y servidor se comunicarán con estos puertos locales en lugar de comunicarse entre sí.
+--------+ +--------+ | | | | +----------+ | | WEBRTC | | +----------+ | Client +----+ Node 1 +----------------------------+ Node 2 +------+ Server | +----------+ | | ^ | +----------+ | | | | | | | | +----+---+ +----+---+ | +-----------+ | | | || | +------------+ SIGNALHUB|-------------+ WebSocket| || Websocket +-----------+
Acuerde un nombre de canal común único entre dos partes. Es simplemente una cuerda grande. Si no está seguro, ejecute UDPeer sin un nombre de canal y generará uno para usted. Transmita esto a la otra parte. Asigne un puerto UDP proxy en cada una de las máquinas. Llamémoslo puerto proxy del cliente (CProxy) y puerto proxy del servidor (SProxy).
Eso es todo. Instale UDPeer en ambas máquinas.
npm install -g udpeer
Del lado del cliente
udpeer -i -c channelId -p CProxy:C
Del lado del 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
Si todo funciona bien, después de un tiempo el servidor y el proxy del cliente se conectarán a través de webrtc y verá un mensaje en la consola.
##Modificando la configuración del cliente
Una vez que el proxy esté configurado, puede cambiar las direcciones IP de su servidor en la configuración del cliente para hablar con los puertos del proxy del host local en lugar de con las direcciones remotas.
Por ejemplo, si la configuración de su servidor en el cliente era 12.131.121.14:3456, entonces se convertirá en 0.0.0.0:7890 (si eligió 7890 como CProxy en el ejemplo anterior)
* ¿Qué pasa si mi cliente no utiliza un puerto de origen fijo para comunicarse? No te preocupes, lo tenemos cubierto. Tan pronto como el cliente se conecte al proxy, el proxy guardará el puerto de origen del cliente y responderá al mismo la próxima vez.
Nota: El código actual no cifra la comunicación. Úselo bajo su propio riesgo. Siga las pautas que su personal de TI le haya proporcionado con respecto a la seguridad portuaria básica.
## Fallo debido a WebRTC
Para evitar algunos fallos en el paquete webrtc en Ubuntu, a continuación se detallan los requisitos previos de los paquetes de Ubuntu/debian. Tenga en cuenta que estas son dependencias del paquete webrtc de Node.js, no de UDPeer directamente. Pruébelo sudo apt-get install python2.7 git-all pkg-config libncurses5-dev libssl-dev libnss3-dev libexpat-dev
Este paquete es posible, gracias al arduo trabajo de
https://github.com/mafintosh/signalhub https://github.com/js-platform/node-webrtc