UDPeer (you-dee-peer) は、シンプルな UDP ピア 2 ピア通信フレームワークであり、webrtc 開発者やその他のさまざまな優れた Nodejs コントリビューターによって行われたハードワークの上に構築されています。
基本的な考え方は次のとおりです。
2 台のマシンが NAT やファイアウォールを介して WebRTC 経由で通信できれば、UDP パケットも交換できるはずです。これがこのプロジェクトのすべてです。 UDPeer は、双方向で実行され、双方向 UDP チャネルを提供する単純な UDP プロキシです。
このプロキシは、クライアントとサーバーがパブリック インターネットを使用して webRTC 経由で通信できる場合にのみ機能します。通常、発信インターネット接続がある限り問題なく動作しますが、確認のために、https://simplewebrtc.com/demo.html などのさまざまなサイトでこれをテストすることもできます。
本当にシンプルです。
npm install -g udpeer
クライアント側とサーバー側で udpeer プロキシの個別のインスタンスを実行する必要があります。ファイアウォールを突破する WebRTC を使用して、相互に通信チャネルを確立します。 webrtc はノード間のシグナリングを必要とし、これは単純な WebSocket ベースのサーバーである Signalhub (https://github.com/mafintosh/signalhub) を使用して行われます。理想的には、独自のシグナリング サーバーをセットアップし、そこに URL を指定する必要があります。
プロキシが通信チャネルを確立すると、ローカルホスト上で UDP ローカル ポートが公開されます。クライアント プログラムとサーバー プログラムは、相互に通信するのではなく、これらのローカル ポートと通信します。
+--------+ +--------+ | | | | +----------+ | | WEBRTC | | +----------+ | Client +----+ Node 1 +----------------------------+ Node 2 +------+ Server | +----------+ | | ^ | +----------+ | | | | | | | | +----+---+ +----+---+ | +-----------+ | | | || | +------------+ SIGNALHUB|-------------+ WebSocket| || Websocket +-----------+
二者間で一意の共通チャンネル名に同意します。これは単なる大きな文字列です。不明な場合は、チャネル名を指定せずに UDPeer を実行すると、チャネル名が生成されます。これを相手に渡します。各マシンにプロキシ UDP ポートを 1 つ割り当てます。これをクライアント プロキシ ポート (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 になります (前の例で CProxy として 7890 を選択した場合)
*クライアントが通信に固定ソース ポートを使用しない場合はどうなりますか?心配しないでください。これは解決済みです。クライアントがプロキシに接続するとすぐに、プロキシはクライアントの送信元ポートを保存し、次回同じポートに応答します。
注: 現在のコードでは通信が暗号化されません。ご自身の責任でご使用ください。基本的なポートのセキュリティに関して 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