※自分の調査メモ
自分のプライベートIPの確認
↓このサイトにアクセスすると、自分のプライベートIPアドレスが分かります。
http://ip-api.com/
普通、プライベートIPは分からないはずなのにどうやっているのか?
WebRTCが使われています。
このip-api.com、githubでソースが公開されており、なんとシングルページのhtmlです。
https://github.com/vladc/ip-api.com
source.htmlの中のget_internal()という関数でプライベートIPを取得しています。
2者間でカメラの映像をやり取りする
simpleWebRTCというライブラリを使うとムチャクチャ簡単にできます。
https://simplewebrtc.com/
このページのトップに書かれているわずかなhtmlとJavaScriptをコピペするだけ。
(htmlはhttpsのサイトに置かないとカメラが使えないので注意)
ただし、プロダクションで使うにはSTUNサーバやシグナリングサーバを自前で立てる必要があり、そこが面倒そうです。
simplewebrtcのデフォルトで設定されているのはこれ:
シグナリングサーバ:https://github.com/andyet/signalmaster
STUN&TURNサーバ:https://github.com/otalk/restund
TURNサーバのホスティングもあるらしい。
https://xirsys.com/simplewebrtc/
テキストチャットのデモ
デモ
https://www.webrtc-experiment.com/text-chat/
ソースコード
https://github.com/muaz-khan/WebRTC-Experiment/tree/master/text-chat
Atomのteletypeをパケットキャプチャしてみたところ
WebRTCは基本的にUDPベースです。
片方のAtomでキーを入力する度にパケットが送られているようです。そのとき必ず応答パケットも送られるので、ACKをしてるのだと思います。
UDPはパケットの到達順序も保証されないですが、SCTP(UDP+TCPみたいなもの)を使っているので、到達順序は保証されるようです。
teletypeのソースをgrepしてみたところ、必ず使っているはずの RTCPeerConnection
などがありませんでした。atom本体の方に組み込まれているのだろうか?
同一LAN内のマシンで通信する場合
STUNによるNAT越えの説明を読む限り、一度ルータを出てグローバルIPを使って通信しそうと思ったのですが、ちゃんとプライベートIPで通信していました。
For More Info
WebRTC Advent Calendarが参考になりそう
https://qiita.com/yusuke84/items/286f569d110daede721e