サーバーなしのブラウザマルチプレイヤー



最近、WebRTCテクノロジーについて多くのことが書かれています。 2つのクライアント間に特殊なサーバーを使用せずに相互作用できますが、サーバーが必要になるのは、接続が確立されてからです。 また、接続自体をインストールする段階では、まだいくつかのサーバーリソースが必要です。 サーバーの必要性を取り除くことは可能ですか? カットの下でこの方向に小さな実験。



rtc接続用のサーバーの必要性は、2つの目的で発生します。 1つは、プロトコル自体をサポートするために必要な技術メッセージの交換を提供するシグナルサーバーです。 幸いなことに、シグナルサーバーの既製の実装がいくつかあり、それらはすべての人の喜びのためにネットワーク上で既に開かれています。 たとえば、キットの便利なpeer.jsライブラリにはクラウドシグナルサーバーもあります。

したがって、質問のこの部分について本当に心配することはできません。 もちろん、クラウドサーバーには接続数に関する多くの制限がありますが、これを開始するには十分です。



しかし、2番目の部分があります。 rtcプロトコルを介した接続のためにシグナルサーバーを操作する前に、参加者は識別子を交換する必要があります。 識別子により、シグナリングサーバーは、多くの潜在的な受信者の中から必要な参加者を選択できます。 そして、識別子情報の配信は開発者にかかっています。 たとえば、peer.jsは、「サイトのユーザー間でピアIDを通信する責任があります」と伝えています。 この問題に対する既成のソリューションは見つかりませんでした。



しかし、ランダムなサブスクライバーとの接続を確立したい場合はどうでしょうか? オンラインゲームの場合、これは必要なものだけかもしれません。 この場合の典型的なソリューションは、登録済み識別子のデータベースを保存する特別なサーバーの作成です。 それほど難しくはありませんが、このサーバーを取り除きたいです。 結局、固定識別子で開かれたrtc接続を介してこの識別子の転送を保証する人はいません。 アイデアはこれです:





すべてのコードは50行に収まります。 ミニライブラリの形式で登録した後(ここからダウンロードできます: github.com/bay73/puzzleduel/blob/master/randompeer.js )、次のように使用できます。



 var peer = new Peer({key: key}); connectRandom(peer, function(connection) { //      connection.on('data'), function(data){ /*   */}); connection.send(data); /*   */ }, function() { //      } );
      
      







github: bay73.github.io/puzzleduelに基づいて作成されたおもちゃの完全なコードを表示し、負荷テストを提供できます。 週の終わりの期待を明るくする人がいるかもしれません。 主な問題は、すべてのブラウザー(およびすべてのバージョン)WebRTCが完全にサポートしているわけではないことです。



しかし、プレイしたくない人にとっては、問題は-そのようなアプローチは顕著なユーザー負荷で機能するのでしょうか?



All Articles