Javascript 获取io.on范围外的套接字信息(';连接';,函数(套接字){});
请问如何解决这个问题 我的问题是关于插座的,你必须拥有一些知识才能回答 我试图在函数本身之外声明的变量上保存Javascript 获取io.on范围外的套接字信息(';连接';,函数(套接字){});,javascript,node.js,Javascript,Node.js,请问如何解决这个问题 我的问题是关于插座的,你必须拥有一些知识才能回答 我试图在函数本身之外声明的变量上保存socket.id,但没有成功。。。使用偶数数组,但使用相同的东西 这是我的密码: var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http) app.use('/', express.
socket.id
,但没有成功。。。使用偶数数组,但使用相同的东西
这是我的密码:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http)
app.use('/', express.static('www'));
http.listen(3000, function(){
console.log('listening on *:3000');
});
var token_user = {};
io.on('connection', function(socket){
token_user["something"] = socket.handshake['query']['something'];
token_user["socket_id"] = socket.id;
});
console.log(token_user["socket_id"]); // Undefined
我收到一条消息,它是:未定义
是否有任何解决方案或其他方式可以获取
socket.id
,以便在其他功能中使用它?它看起来像是控制台。在令牌用户上设置字段之前,正在执行日志。当该事件发生时,将执行传递到io.on
的方法。同步执行io.on
之后的行
尝试将console.log
移动到传递给io.on()的函数中。
看起来console.log是在设置字段之前执行的。@Anthony我需要在范围外使用socket.id
,而不仅仅是在io.on('connection',function(socket){}内使用代码>你的用例是什么?@JonasW。我需要socket.id
将其存储在redis上,以便向特定用户发送消息。我想你不明白为什么这个问题被标记为与你的其他评论重复。主要的是js是异步的。这意味着代码中的console.log(…
在io.on(“连接”)之前执行,…
您仅在建立连接后设置socket_id的值。因此,您会遇到此错误。您的变量将在此io的范围之外进行访问。在…
上,但它仅在连接后定义。您可以使用它。我还将编辑下面的答案以使您更清楚。您没有收到我的问题,先生,我不需要o获取SOCKET\u ID
超出范围,超出io.on('connection',function(SOCKET){})
在其他地方使用它。该字段只有在设置后才可用。设置该字段后,您可以调用其他方法来处理附加逻辑。请举例说明如何将socket.id
从外部获取以便在其他地方使用它,请再次阅读我的问题,它没有那么基本:)。再次感谢您的努力。@BenMarson我已经用一个将token_user对象传递给另一个方法的示例更新了我的答案。在我的情况下,这是不可能的,因为我需要在函数之外使用它,以便与REDIS CLIENT
一起使用它,因为REDIS在io.on中包含时有一些问题('connection',function(socket){});
,那么我只需要从该函数中提取socket.id
,并在其他地方自由使用它。
function anotherMethod(user) {
console.log(token_user["socket_id"]); // will be "x"
}
var token_user = {};
io.on('connection', function(socket){
token_user["socket_id"] = "x"
anotherMethod(token_user);
});