WebRTC のデータ チャネルの PeerJS 実装を使用して、テキスト チャット サービスをセットアップしました。PeerJS はこの目的のために基本的なシグナリング サーバーを提供しますが、私はそれを XirSys (SimpleWebRTC、別の WebRTC ライブラリで推奨) を介してセットアップされた STUN および TURN サーバーに置き換えようとしました。まだ Web に展開していません。
Node を使用してローカルで静的ファイルを提供すると、ローカル ネットワークでは機能します (私がその人の隣に座っており、ブラウザーで私の IP/ポートに移動した場合)、別のアクセス ポイントを介して接続すると機能しません同じネットワーク (つまり、職場、建物の反対側)。
私の仮説は、ファイアウォールにヒットしているが、セットアップしようとした XirSys STUN および TURN サーバーにフォールバックすることなく、PeerJS のシグナリング サーバーにトラフィックを誘導しているというものです。ここに私が取り組んでいるコードがあります:
var stun = {};
var turn1 = {};
var turn2 = {};
$.ajax({
type: "POST",
dataType: "json",
url: "https://api.xirsys.com/getIceServers",
data: {
ident: "myusername",
secret: "long-alphanumeric-secret-key",
domain: "www.adomain.com",
application: "anapp",
room: "aroom",
secure: 1
},
success: function (data, status) {
console.log(data);
stun = data.d.iceServers[0];
turn1 = data.d.iceServers[1];
turn2 = data.d.iceServers[2];
},
async: false
});
var conn;
// Connect to PeerJS, have server assign an ID instead of providing one
var peerID = prompt('What would you like your screen name to be?');
var peer = new Peer(
peerID,
{key: 'mypeerjsserverkey', debug: true},
{
config: {'iceServers': [
{url: stun.url},
{url: turn1.url, credential: turn1.credential, username: turn1.username},
{url: turn2.url, credential: turn2.credential, username: turn2.username}
]
}
});
注: 私の ID、シークレット、ドメインなどは、ここでは明らかに正確に表現されていません。それが私の問題だとは思いません。
何かご意見は?