10

PeerJSシンプルな 2 人用オンライン ゲームを実装するために評価しています。あるプレーヤーの接続を別のプレーヤーに転送するidと、PeerJS を介してチャネルを開くことができ、準備ができているようです。

しかし、お互いを知らない 2 人のプレーヤーがプレーしたい場合、そこで試合を行う最もエレガントな方法は何ですか? 接続されているすべてのクライアントのリストを PeerJS ブローカーに要求する方法はありますか? または、すべてのクライアントにブロードキャストする方法はありますか?

4

2 に答える 2

22

PeerServerを使用するconnectionと、2 つのイベントを取得できますdisconnect。これを使用して内部リストを作成し、それをアプリケーションに取得させることができます。

部分的な例:

var PeerServer = require('peer').PeerServer;
var server = new PeerServer({port: 9000, path: '/myapp'});
var connected = [];
server.on('connection', function (id) {
  var idx = connected.indexOf(id); // only add id if it's not in the list yet
  if (idx === -1) {connected.push(id);}
});
server.on('disconnect', function (id) {
  var idx = connected.indexOf(id); // only attempt to remove id if it's in the list
  if (idx !== -1) {connected.splice(idx, 1);}
});
someexpressapp.get('/connected-people', function (req, res) {
  return res.json(connected);
});

次に、クライアント側のコードで AJAXを実行/connected-peopleし、そのリストを使用できます。

メタデータについては、上記のコードを拡張して、ユーザー ステータスとそのステータスを更新する方法を追加できます。

お役に立てれば!

編集執筆時点では、イベントの名前はconnect. と名付けられましconnectionた。

(また、PeerJS を 6 時間ほど使用する予定です。これまでに行ったことを理解していただければ幸いです。)

于 2014-03-09T11:49:45.733 に答える
2

念のため、これが誰かの役に立てば、PeerJS を Express サーバーと組み合わせて使用​​すると、次のようになります。

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var ExpressPeerServer = require('peer').ExpressPeerServer;
var expressPeerServer = ExpressPeerServer(server, {});
app.use('/peerjs', expressPeerServer);
expressPeerServer.on('connection', function (id) {
  // the rest is the same as accepted answer
});
于 2016-01-29T18:30:46.737 に答える