UDPeer (you-dee-peer) 是一個簡單的 UDP 對等 2 對等通訊框架,建立在 webrtc 開發人員和其他各種出色的 Nodejs 貢獻者的辛勤工作之上。
基本想法如下:
如果兩台機器可以透過 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) 完成的,這是一個基於 websocket 的簡單伺服器。理想情況下,您應該設定自己的信令伺服器並在其中指定 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 位址,以與本機主機代理連接埠而不是遠端位址通訊。
例如,如果您在客戶端中的伺服器設定為 12.131.121.14:3456 那麼它將變成 0.0.0.0:7890 (如果您在前面的範例中選擇 7890 作為 CProxy)
*如果我的客戶端不使用固定源連接埠進行通訊怎麼辦?別擔心,我們已經解決了這個問題。一旦客戶端連接到代理,代理將保存客戶端來源連接埠並在下次回覆相同的連接埠。
注意:目前代碼不會加密通訊。請自行承擔使用風險。請遵循 IT 人員提供的有關基本連接埠安全的任何指南。
##由於 WebRTC 導致崩潰
為了避免 Ubuntu 中的 webrtc 軟體包崩潰,以下是 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