UDPeer (you-dee-peer) — это простая платформа одноранговой связи UDP Peer 2, созданная на основе тяжелой работы, проделанной разработчиками webrtc и другими замечательными участниками Nodejs.
Основная идея заключается в следующем:
Если две машины могут общаться через WebRTC через NAT и межсетевые экраны, они также должны иметь возможность обмениваться UDP-пакетами. В этом и суть этого проекта. UDPeer — это простой UDP-прокси, работающий с обеих сторон и обеспечивающий двунаправленный UDP-канал.
Этот прокси-сервер будет работать только в том случае, если ваш клиент и сервер могут обмениваться данными через webRTC, используя общедоступный Интернет. Обычно это работает без каких-либо проблем, если у вас есть исходящие подключения к Интернету, но просто для проверки вы также можете проверить это на различных сайтах, таких как https://simplewebrtc.com/demo.html.
Действительно просто.
npm install -g udpeer
Вам нужно будет запустить отдельные экземпляры прокси-сервера udpeer на стороне клиента и сервера. Они установят канал связи друг с другом с помощью WebRTC, который преодолевает межсетевые экраны. webrtc требует передачи сигналов между узлами, что осуществляется с помощью Signalhub (https://github.com/mafintosh/signalhub) — простого сервера на основе веб-сокетов. В идеале вам следует настроить собственный сервер сигнализации и указать там URL-адрес.
Как только прокси-серверы установят канал связи, они откроют локальный порт 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-адреса своего сервера в настройках клиента, чтобы он разговаривал с портами прокси-сервера localhost вместо удаленных адресов.
Например, если конфигурация вашего сервера в клиенте была 12.131.121.14:3456, тогда она станет 0.0.0.0:7890 (если вы выбрали 7890 в качестве CProxy в предыдущем примере)
*Что делать, если мой клиент не использует фиксированный исходный порт для связи? Не волнуйтесь, мы позаботились об этом. Как только клиент подключается к прокси-серверу, прокси-сервер сохранит исходный порт клиента и ответит на него в следующий раз.
Примечание. Текущий код не шифрует связь. Пожалуйста, используйте на свой страх и риск. Следуйте всем рекомендациям вашего ИТ-персонала относительно базовой безопасности порта.
##Сбой из-за WebRTC
Чтобы избежать некоторых сбоев в пакете webrtc в Ubuntu, ниже приведены предварительные условия для пакетов Ubuntu/debian. Обратите внимание, что это зависимости для пакета Node.js webrtc, а не непосредственно для UDPeer. Пожалуйста, попробуйте 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