三年ぶりにWebRTCをGASでシグナリングで頑張るゾイ1

やあ (´・ω・`) ようこそ、セルフまとめへ。 このテキーラはサービスだから、まず飲んで落ち着いて欲しい。 うん、「また」なんだ。済まない。 仏の顔もって言うしね、謝って許してもらおうとも思っていない。 でも、このまとめタイトルを見たとき、君は、きっと言葉では言い表せない 「ときめき」みたいなものを感じてくれたと思う。 殺伐とした世の中で、そういう気持ちを忘れないで欲しい そう思って(という建前で)、このセルフまとめをまとめたんだ。 続きを読む
1
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

うーん予想はしていたが放置していた3年間の間にAPIの仕様が若干変わってるな・・・ offer→answer(ここで終了ではなく)→candidatesを交換→接続 の流れか・・・ ※httpsにしてもつながらなかった

2022-07-28 02:08:58
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

漸くつながったゾイ・・・ まあ単純にソースがバグっていた。ヨシヨシ。 問題はcandidatesの交換まで書かないと駄目か・・・

2022-07-29 21:45:21
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

Firefoxさん・・ローカルで開かないんだが・・・ ローカルでもTURN鯖要求するとか贅沢すぎない? TURN鯖が必要ならWebRTCいらないのよ。

2022-07-30 17:47:36
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

むむむ・・・ 結局接続方法がわからない・・ 同一プロファイルでの実行が不可能なら分かるが 別プロファイルでも駄目とか別ブラウザでも駄目となるとしんどいなぁ 同一デバイス上でWebRTCのデータチャンネルを開きたいだけなのだが・・・ FirefoxだけがグローバルIPネットワークしか見ていない

2022-08-01 03:11:37
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

3秒ルールでCandidatesを交換できたらOKなのか それとも別のタブは絶許なのか・・・うーんローカルストレージ経由でやるか・・・

2022-08-02 03:54:33
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

うん、出来たよ・・・ Firefoxで同一ブラウザプロファイルの別タブ間WebRTCのコネクション張りが。 1秒以内にシグナリング交換を完了できればいいっぽい・・・ これをRESTのチンタラマターリなGASで実現できるかと言うと・・・ 低レイテンシーな無料鯖は無いのか?10kB制限のある画像でもいい!

2022-10-04 03:21:31
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

GASのキャッシュに一縷の望みをか・・・ レスポンスが300msとかならええなぁ※すでにダメそう developers.google.com/apps-script/re…

2022-10-05 01:55:59
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

keyは250byte(512bitでBASE64でも88byteで2杯+384bit1杯いける)、キャッシュ本体は100kb(bookmarkletそのまま配布できるやん!)、最大1000件、最大10分で消失と すごく理想的だったりするのだが・・・

2022-10-05 02:20:51
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

GAS久々すぎてどうでも良い所にハマってしまった。 まあキャッシュに入れて1.3秒、出すのに1秒と。 なかなか厳しい物が有るな・・・ 果たして、シグナリングは可能なのか? なんかこれだと0.2秒間隔で5並列ぐらい投げないと応答速度を稼げないのでは?

2022-10-12 03:33:42
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

うむ、GAS経由でシグナリングに成功したぞい! これは!行ける! 問題は、負荷だなぁ・・・ タダのhttp鯖に問い合わせをしているだけなので で、どっちがオファーを出すかも分からない。 なので、オファー決定プロトコルが要るなぁ 状況を整理すると デバイスがn台あってつなぎたい。いいね。

2022-10-27 01:15:23
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

この時、一回目のペアリングは良い。 問題は再接続時か。 デバイス自身がペアリング先とつながってない事が判明した時、どう振る舞えばいい? シグナリング鯖に今準備できてます宣言を20s間隔で問い合わせて、居たら0.2s間隔で問い合わせを開始、その状態を準備状態で登録 20sで相手も検知、オファーと

2022-10-27 01:40:26
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

20s内に1000件のデータ密度まではペアリング処理が可能と1ペアリングに4レコード使用すると2.5ペア/sのスループットは出せるな。 鯖の対応としては即時消し、放置(※600s後に削除)の二択か。 クライアント側は20s以内でないと認めない的な。 これに暗号化が挟まると。

2022-10-27 02:05:53
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

手軽さから言うと ユーザーがペアリングしたい場合 デバイスがn個存在して ①ネットワーク名を決める ②デバイス名を決める:面倒くさいのでUAのハッシュ値か、UUIDか。 ③シグナリング鯖を設定する この状態で繋がると良い。

2022-10-27 03:09:54
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

それで、通信可能にするには 青歯の様に数桁の数字を入れてペアリングをすると。 この時にハッシュ値を交換して記憶 後は常にペアリング状態として通信を接続完了と同時に許可と。 ネットワークが切り替わって切れたらまあ1分以内に再接続と行った塩梅か。

2022-10-27 03:15:09
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

あとはn台の接続をフルメッシュでやるかやらないかだなぁ。 AとBとCとDが同じグループに居るとして AとB、BとC、CとDがペアリングしている場合 AからCにデータ転送は出来るのか? リレーしたら出来るけど・・・・ これルーティングテーブルを持つイメージになるのかな? まあ、まずはペアリングだな

2022-10-27 03:19:08
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

ハッシュ値が最高密度表現型のBASE64で512bitで88文字256bitで44文字、漢字でBASE4096とかで12bit1文字にすると512bitでも43文字だけどまあ声に出せない時点で終わってるな・・・UUIDがやはりいいのか。256bitで濁すか。

2022-10-27 12:59:53
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

まず、wait状態の表明をシグナリング鯖にしないと始まらないそうなると、KVSなので一切のデータのリスト取得は出来ない。なので特定キー(ハッシュ値+秒数)でwait宣言と。このキャッシュってレコードロックは無理なのか。 とすると、時間単位にキャッシュを持つしか無いな・・・Waitは時間は大丈夫

2022-10-27 22:08:32
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

キャッシュKVSに同時に同一Keyに書き込んだとき、後勝ちで上書きされる 従って ①一回同一キー書き込みをしてみて ②自分が振り出したランダム値が存在するか確認する ③存在した場合は後続に進む ④存在しない場合はしばらく待ってもう一度①からチャレンジする これで整流はできるな。

2022-10-27 23:05:19
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

各端末は「ウェイ+ハッシュ値A」「ウェイ+ハッシュ値B」って言いながら Aが「あ、俺と違うハッシュ値が有る♡」 から A「俺待ってる+ハッシュ値A+ハッシュ値B」 に移行※AはBが同じことを自分より先にしていないことを確認する(20秒間) B「じゃあオファー出すね!」 で接続と 接続完了後待機解除

2022-10-28 12:41:33
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

接続待機期間中は 複数コンテキストで並列にAPIに 「ねぇA/BからのOFFER/ANSWERまだ?」って アクセスしまくってしまう。 これはあまり良くない。 で、ペアリングを済ませたらデータ転送開始と。 この時のキーがハッシュ値+グループID+「俺待ってる+ハッシュ値A+ハッシュ値B」のハッシュ

2022-10-28 12:55:07
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

今はWebpack使ってるけど、ESMに移行しないとなぁ。 正直ビルドシステムを経由するのは後回しにしたい。 でないと手間がかかって仕方ない。

2022-10-28 20:16:50
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

GASちゃん・・・doPostにasync使えないのなんとかしてクレメンス・・・どうやって待てばええんや・・・ (WhileでDate.now()の無限ループ) twitter.com/junderwood4649…

2022-10-29 04:46:37
Jonathan Underwood @junderwood4649

@howdy39 async await 使えるようになりました!!!! …でもAPIの殆どがまだ同期的に返ってくるのであまり活用できなさそうですね、まだ。。。 簡易的なラッパー作れますが。 async (url) => UrlFetchApp.fetch(url) (うろ覚え) doGet doPostも async にするとPromiseの戻り値にびっくりしてエラーw

2020-02-06 16:16:48