36 ポイント 投稿者 xguru 2025-10-27 | 8件のコメント | WhatsAppで共有
  • 数行のコードだけで、サーバーなしで相互接続されるマルチプレイヤーWebアプリを実装できるようにするライブラリ
  • ブラウザのWebRTCをベースに、公開ネットワークをシグナリングチャネルとして活用し、P2Pマッチングと通信を自動化
    • BitTorrent, Nostr, MQTT, IPFS, Supabase, Firebaseのいずれかを選んで、サーバー不要のピア発見を実行
    • シグナリング後のアプリデータは中間媒体を経由せず、P2P + E2E暗号化で送信される
  • Rooms/ブロードキャスト、自動シリアライズ、大容量データのチャンク化/スロットリング、進捗イベント、セッションデータ暗号化、ストリームメタデータなどの高水準抽象化を提供
  • ブラウザだけでなくNode/Deno/Bunでも動作し、TURNサーバー設定Reactフックサーバーサイド実行など実践的な機能をサポート
  • パブリックインフラを設定不要で活用する方式のため、さまざまな実験やプロトタイピングに向いている

8件のコメント

 
kimjoin2 2025-10-27

TURNサーバーはご先祖様が用意してくれるんですか?

 
helio 2025-10-28

ソースに 'stun:stun.cloudflare.com:3478' が埋め込まれていますね

 
kimjoin2 2025-10-28

stun ではなく turn です。
stun は単に STUN の基準で「あなたは誰か」を知らせる程度なので、公開サーバーが多少ありますが、
turn はトラフィックをリレーしなければならないため、(高価なので)お金を払って使うか、自前で構築するかしなければなりません。
例) https://github.com/coturn/coturn
こういうものです。

stun だけで通信できる場合が多いのは確かですが、単純に「できる」と言うには……
で……きなくはないけど……うーん、という感じですね。

 
skageektp 2025-10-29

P2PマッチングならTURNは不要ではないですか

 
kimjoin2 2025-10-29

WebRTCでおっしゃる「p2pマッチング」の意図によると思います。

  1. 相互に UDP でパケット通信が可能な状態
  2. 相互に STUN が知らせるアドレスだけを知っている状態

1番であれば、おっしゃる通り TURN は不要です。
2番でも、状況が良くて相互の UDP 通信が成功している状態なら TURN は不要です。

2番で、相互に UDP でのパケット通信が失敗している状態では TURN が必要です。

失敗する要因は

  • ピアが symmetric NAT の背後にあるなどして、STUN が調べたアドレス(のポート)を使えない
  • ネットワーク経路のどこかで Web トラフィックしか許可されていない(80, 443)
  • ネットワーク経路のどこかで UDP が遮断されている
  • 片方は IPv4 のみ、もう片方は IPv6 のみを使っている
  • など?

という場合は TURN を使う必要があります。

(IPv4 only <-> IPv6 only がだめだというのは、記憶を確認していて初めて知りました)

 
skageektp 2025-10-30

ええ、つまり2番です。『サーバーなしで相互連携』『ライブラリ』と言っていましたが、期待しすぎなのではないでしょうか……

 
kimjoin2 2025-10-30

どの部分をおっしゃっているのでしょうか?

  1. STUN で通知されるアドレス(+ポート)だけで接続できるので、TURN サーバーは不要だ。したがって「サーバーなしで相互接続」という表現は、文面どおり正しい。
    -> これなら、私の知識が古いのかもしれません。私が理解していて(共有した)内容以降に状況が変わった部分があれば、教えていただけるとありがたいです〜!
  2. TURN サーバーは必要だが、ライブラリなのだからその程度は大目に見よう。
    -> skageektpさんのおっしゃることが正しいです。ライブラリなのだから、その程度は大目に見ることもできます。私が敏感すぎました。

私は
3. ちゃんと使うには STUN だけでは不十分で TURN が必要なのに、誇張がひどいな〜
を表現していました.

 
kimjoin2 2025-10-29

1番と2番の説明について、

  1. 相互にUDPでパケット通信が可能な状態 -> 相互のピアがUDPでパケット通信が可能な状態
  2. 相互にSTUNが知らせるアドレスだけを知っている状態 -> 相互のピアがSTUNが知らせるアドレスだけを知っている状態

に訂正します。元の文章では誤解の余地がありますね。