简体   繁体   English

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

[英]socket.io: How to get socket variable from other socket?

There are two players in one room. 一间房间有两名球员。

Every player has a color saved as a socket variable: 每个播放器都有保存为套接字变量的颜色:

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

It is easy to get this color variable, when the client with this color triggers the request: 当具有这种颜色的客户端触发请求时,很容易获得这个颜色变量:

socket.on('own_color', function(){

    console.log('own color:     ' + socket.color);

});

But now we need the color of the other player. 但是现在我们需要其他播放器的颜色。 Maybe we can get it somehow by using the other player's socket id: 也许我们可以通过使用其他玩家的套接字ID来获得它:

socket.on('partner color', function(){

    var partnerid = io.sockets.clients('room1')[0].id;
    var partnercolor = '????????'

    console.log('partner color     ' + partnercolor);

});

Do you know how to get the color of the other player? 您知道如何获得其他播放器的颜色吗?

Somewhere, you're calling io.listen - make sure you store that result: 在某个地方,您正在调用io.listen确保存储该结果:

socketio = io.listen(...)

Then, you can get the socket object based on a socket ID: 然后,您可以基于套接字ID获取套接字对象:

socketio.sockets.sockets[idSocket]

you will have to communicate over the socket, requesting the data you need. 您将必须通过套接字进行通信,以请求所需的数据。 The socket connections itself are just a transport. 套接字连接本身只是一种传输。 If you need to know something "emit" a question and on the other side listen ("on") for that question and respond accordingly 如果您需要了解一些“发出”问题的知识,而另一方面,听(“讲”)该问题并做出相应答复

guessing io.sockets.clients('room1') is a list of all clients in that room then: 猜测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);
});

and on the other side 在另一边

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

Thanks to Aaron Dufour we can now post the missing snippet: 感谢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);

});

Our server combines express and socket.io, so maybe someone is interested, how io.listen is called in this case: 我们的服务器结合了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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM