Javascript io:如何从其他套接字获取套接字变量?

Javascript io:如何从其他套接字获取套接字变量?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,一个房间里有两名球员 每个播放器都有一个保存为套接字变量的颜色: socket.on('join', function(color){socket.color = color}); 当具有此颜色的客户端触发请求时,很容易获取此颜色变量: socket.on('own_color', function(){ console.log('own color: ' + socket.color); }); 但是现在我们需要另一个玩家的颜色。 也许我们可以通过使用其他玩家的套接字i

一个房间里有两名球员

每个播放器都有一个保存为套接字变量的颜色:

socket.on('join', function(color){socket.color = color});
当具有此颜色的客户端触发请求时,很容易获取此颜色变量:

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.sockets.clients('room1')是该房间中所有客户机的列表 然后:

另一边呢

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

在某个地方,您正在调用
io。请听
-确保存储该结果:

socketio = io.listen(...)
然后,您可以根据套接字ID获取套接字对象:

socketio.sockets.sockets[idSocket]

多亏了Aaron Dufour,我们现在可以发布缺失的片段:

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

我们对问题进行了编辑,使之更容易理解。我们的问题是如何访问另一个客户机的socket变量。不管怎样,谢谢你的回答。我估计你的两个玩家(A和B)都使用浏览器,并从服务器获取他们的套接字连接,如果A想要B的颜色,它应该要求B,而服务器应该要求B,并用B的awnser对A作出回应;A和B没有直接连接,对吗?在客户端的套接字上设置一些变量不会通知服务器该信息,所有通信都需要通过服务器进行,因此您必须这样做。我们正在搜索如下代码:
partnercolor=io.sockets.manager.partnerid.color(此注释中的代码当然不起作用。我们只想解释一下这个问题。)
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);