使用PeerJS进行广播或对等发现

Joa*_*ner 9 javascript p2p webrtc peerjs

我正在评估PeerJS,以实现一个简单的双人在线游戏.似乎一旦我将id一个玩家的连接转移到另一个玩家的连接,他们就可以通过PeerJS打开一个频道并且很好.

但是如果两个玩家想玩不相识的玩家,那么最优雅的方式是什么呢?有没有办法向PeerJS经纪人询问所有连接客户的列表,可能附加了一些元数据(例如"状态:想要玩")?或者是向所有客户广播的方式?

Zac*_*tes 19

使用PeerServer,您可以获取两个事件,connection和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);
});
Run Code Online (Sandbox Code Playgroud)

然后,在您的客户端代码中,您可以/connected-people使用AJAX 并使用该列表.

对于元数据,您可以扩展上面的代码以添加用户状态和更新该状态的方法.

希望这可以帮助!

编辑在撰写本文时,该活动被命名connect.它现在被命名connection.

(此外,我现在将与PeerJS一起玩六个小时.我希望你能意识到你已经完成了什么.)

  • @ZekeSonxx`Object.keys(server._clients.peerjs);`相同的数组 (6认同)
  • 您还可以在创建对等服务器时传递选项"allow_discovery:true".然后在浏览器中使用方法`peer.listAllPeers`.我认为peerjs网站上没有记录这一点. (2认同)
  • 这里有关于peer.listAllPeers()的更多信息:https://github.com/peers/peerjs/issues/173 该方法使用回调:```peer.listAllPeers((allPeers)=> { console.log( allPeers) })``` (2认同)