socket.io:如何从其他套接字获取套接字variables?

一个房间里有两个玩家。

每个玩家都有一个颜色保存为套接字variables:

socket.on('join', function(color){socket.color = color}); 

当使用此颜色的客户端触发请求时,很容易获得此颜色variables:

 socket.on('own_color', function(){ console.log('own color: ' + socket.color); }); 

但现在我们需要其他玩家的颜色。 也许我们可以通过使用其他玩家的套接字ID来得到它:

 socket.on('partner color', function(){ var partnerid = io.sockets.clients('room1')[0].id; var partnercolor = '????????' console.log('partner color ' + partnercolor); }); 

你知道如何获得其他玩家的颜色吗?

某处,你打电话给io.listen确保你存储了这个结果:

 socketio = io.listen(...) 

然后,您可以根据套接字ID获取套接字对象:

 socketio.sockets.sockets[idSocket] 

你将不得不通过套接字进行通信,请求你需要的数据。 套接字连接本身只是一个传输。 如果你需要知道一些事情“发出”一个问题,并在另一边听(“开”)这个问题,并作出相应的回应

猜测io.sockets.clients('room1')是那个房间里所有客户的列表,然后:

 io.sockets.clients('room1')[0].emit('request color'); io.sockets.clients('room1')[0].on('respond color', function (color) { console.log('color received', color); }); 

另一方面

 socket.on('request color', function () { socket.emit(color); }); 

感谢Aaron Dufour,我们现在可以发布缺less的片段:

 socket.on('partner color', function(){ var partnerid = io.sockets.clients('room1')[0].id; var partnercolor = io.sockets.sockets[partnerid].color; console.log('partner color: '+ partnercolor); }); 

我们的服务器结合了express和socket.io,所以也许有人会感兴趣,在这种情况下io.listen是如何被调用的:

 var express = require('express') , http = require('http'); var app = express(); var server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(8080);