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