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

Javascript 使用PeerJS进行广播或对等发现,javascript,p2p,webrtc,peerjs,Javascript,P2p,Webrtc,Peerjs,为了实现一个简单的两人在线游戏,我正在评估PeerJS。似乎一旦我将一个玩家连接的id转移到另一个玩家,他们就可以通过PeerJS打开一个频道,并且可以继续 但是,如果两个不认识对方的球员想要比赛,在那里进行比赛最优雅的方式是什么?是否有办法要求PeerJS代理提供所有已连接客户端的列表,可能附带一些元数据(如“状态:想玩”)呢?还是有一种向所有客户端广播的方法?使用,您可以抓取两个事件,连接和断开连接。使用它,您可以创建一个内部列表,然后从中获取应用程序 部分示例: var PeerServe

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

但是,如果两个不认识对方的球员想要比赛,在那里进行比赛最优雅的方式是什么?是否有办法要求PeerJS代理提供所有已连接客户端的列表,可能附带一些元数据(如“状态:想玩”)呢?还是有一种向所有客户端广播的方法?

使用,您可以抓取两个事件,
连接
断开连接
。使用它,您可以创建一个内部列表,然后从中获取应用程序

部分示例:

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
/connectedpeople
并使用该列表

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

希望这有帮助

EDIT在编写本报告时,事件名为
connect
。它现在被命名为
connection


(另外,我现在将与PeerJS一起玩六个小时。我希望你能意识到你所做的一切。)

以防万一,如果这对某人有帮助,如果你将PeerJS与express server结合使用,这将如下所示:

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
});

@ZekeSonxx
Object.keys(server.\u clients.peerjs)
相同的阵列您还可以在创建对等服务器时传递选项
允许查找:true
。然后只需在浏览器中使用方法
peer.listAllPeers
。我认为peerjs网站上没有记录这一点。我在
indexOf
checks中进行了编辑,因为网络事件是不可靠的,所以我们可能会错过一两次。添加检查后,事件侦听器将变为。此处有关于peer.listalpeers()的更多信息:该方法使用回调:
peer.listalpeers((allPeers)=>{console.log(allPeers)})