我正在评估PeerJS
以实现一个简单的双人在线游戏。看来,一旦我将一个玩家的id
连接转移到另一个玩家的连接,他们就可以通过PeerJS打开一个频道并且很高兴。
但是如果两个玩家想玩的话彼此不认识,那么最优雅的方式是什么呢?有没有办法向PeerJS经纪人询问所有连接客户的列表,可能附加了一些元数据(例如“状态:想要玩”)?还是可以向所有客户广播?
答案 0 :(得分: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);
});
然后,在您的客户端代码中,您可以使用AJAX /connected-people
并使用该列表。
对于元数据,您可以扩展上面的代码,以添加用户状态和更新该状态的方法。
希望这有帮助!
编辑在撰写本文时,该活动名为connect
。它现在名为connection
。
(另外我现在要和PeerJS一起玩六个小时。我希望你能意识到你做了什么。)
答案 1 :(得分:0)
以防万一,如果这对某人有帮助,如果你将PeerJS与快递服务器结合使用,这将看起来如下:
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
});