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