LoginSignup
8
10

More than 5 years have passed since last update.

WebRTCの実験を、ngrokを使って外部サーバー無しで動かそう

Last updated at Posted at 2018-03-01

はじめに

WebRTCの実験を行う際には、Webサーバー、シグナリングサーバーが必要になります。こちらのハンズオンでも、自分のローカル環境でWebサーバーやシグナリングサーバーを動かすようになっています。

同一PC上で実験している分には問題ありませんが、違うPC間や、モバイルデバイスとの間で通信を行おうとすると、急に厄介になります。

  • ChromeやSafariの場合、localhost 以外では http:// ではカメラ/マイクにアクセスできない
  • WiFiとモバイルネットワークなど、ことなるネットワークをまたがっての動作実験ができない
  • 同一WiFiでも、カフェやコワーキングスペース、イベント会場などでプライバシーセパレーターが入っていると通信できない

いずれもインターネット上にWebサーバー、シグナリングサーバーを設置することで可能になりますが、少々ハードルが高いと感じることも多いのではないでしょうか。

回避策として例えば次の方法があります。

今回は後者の ngrok を使う方法を取り上げます。

ngrok とは

ローカルネットワークで動いているサーバーを、インターネットからアクセスできるように通信をトンネリングしてくれるツール&サービスです。導入の仕方は例えばこちらの記事が参考になると思います。

無償、有償で使える機能が異なります。ニーズに応じでプランを選ぶことができます。

  • サインアップなし ... http を http/https として公開可能(非公式だがWebSocketも動作)
  • サインアップあり ... tcp を公開可能
  • 有償プラン ... URLを固定可能

非サインアップ/無償プランの場合は、ツールを起動するたびにURLが割り当てられます。継続的に同じURLで利用したい場合は、有償プランが選択できます。
また、セキュリティ面や安定性の面を考えると、実験用に利用することをお勧めします。

WebRTCの実験用にngrok を使ってみる

今回はこちらのWebRTCハンズオン本編で使っているサンプルの最終形を対象にします。

シグナリングサーバー

node.js でシグナリングサーバーを起動した後、ngrok を使ってWebSocketで使っている3001ポートを公開します。

node signaling.js
ngrock http 3001

ここでプロトコルとしてhttpを指定しておくと、WebSocketでも使えるようです。
ポートの公開が成功するとコンソール上にURL情報が表示されます。それをメモしておきます。

Forwarding                    http://xxxxxx.ngrok.io -> localhost:3001
Forwarding                    https://xxxxxx.ngrok.io -> localhost:3001

※ ngrock を起動しなおすとURLが変更されます。

Webサーバー

ソースの修正

同様にWebサーバーも公開しますが、今回のサンプルの場合は WebSocket のURLを先ほどメモした情報を使って書き換えておきます。

webrtc.js の9行目

  • before) const wsUrl = 'ws://localhost:3001/';
  • after) const wsUrl = 'wss://xxxxxx.ngrok.io/';

wsではなく、wssにしましょう。

Webサーバーの公開

Webサーバーを起動したら、そのポートを公開します。例えば 8888 ポートで動かしている場合は次のようにします。

ngrock http 8888

シグナリングサーバーと同様にポートの公開が成功するとコンソール上にURL情報が表示されます。もちろんそれもメモしておきましょう

Forwarding                    http://yyyyyy.ngrok.io -> localhost:8888
Forwarding                    https://yyyyyy.ngrok.io -> localhost:8888

あとは、2台のPCやスマートデバイスから、https://yyyyyy.ngrok.io に接続すればサンプルを使って通信ができる、ハズです。

おわりに

WebRTCを実験している最中に困るのは、外部サーバーが必要になるところだと思います。まずはこんな方法でスタートしてみてはいかがでしょうか?

本格的に使うためには、自分でサーバーを立てるかWebRTCプラットフォームのサービスを利用するのことになりますが、そのための判断材料を集めることができると思います。

補足

ngrok で公開できるのは、TCPだけのようです。UDPをトンネルすることはできませんので、UDPがふさがったネットワーク間で通信するには、TURNサーバーが別途必要になります。

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10