Open6
nest: WebRTC 素HTTPシグナリング処理の見直し

諸般の事情で前書いた素HTTPシグナリングの処理を見直すことにした。

そもそも接続しない
現状の実装は onGatheringStateChange
が complete
になるまで応答を返却しないが、これに30秒近く掛かるようになっていた。前はそんなこと無かったのに。。
とりあえずタイムアウトを増やした。これはまぁTrickle iceの実装が必要かな。。ただ通信処理のコストが高いので適当にスロットルする必要があるな。

window.location.replace
()を使う
シグナリングデータをURLのhash部分でやりとりしているが、この遷移に window.location.replace
を使うように変更しても特に問題なく動作した。
従来は href
に代入していた。

そもそもTrickle ICEしない実装はどのくらい悪いのか
ICE candidateの収集に掛かる時間はここでテストできる。"Gather candidates" ボタンを押す。
Firefoxだと11秒。
Chromeだと30秒でも終わらなかった。
1秒おきとかにポーリングするとかでも良いなこりゃ。。死活確認にもなるし。

Trickle ICEを実装してみた
Offer送らないとICE Candidate突っ込めない?冷静に考えると当たり前だけどAPIが非同期だから見落しがち。。
接続完了もイベントのlatch対象にする必要があるな。。

Popup windowを使う
そもそもなんで普通の a
だったんだろう。。iPhoneのSafariでも特に問題なく動く。