在处理程序之外传递对象引用,即使其成为全局对象

时间:2016-03-17 16:13:23

标签: javascript node.js socket.io

这是我假设的最佳实践问题,但在下文中,有人能告诉我如何在方法处理程序之外传递套接字对象的引用吗?

io.on('connection', function (socket) {
       console.log('connection '+socket);

//do stuff here

});//end callback handler

//need a reference to socket here!!

2 个答案:

答案 0 :(得分:0)

好吧,你必须将它存储在某种套接字连接池中。但请记住,如果您想在具有负载均衡器的多个进程/机器中进行分发,这将无法正常工作。

答案 1 :(得分:0)

只需将其分配给该范围内定义的变量吗?

var globalSocket;

io.on('connection', function (socket) {
  globalSocket = socket;
});

// now what?

但是,我没有理由这样做,因为在调用事件处理程序之前你无法使用该值(只有在调用事件处理程序时才会知道)。 / p>

要解决这个问题,您需要将需要访问套接字的代码放在函数中,并从事件处理程序中调用该函数:

var globalSocket;

io.on('connection', function (socket) {
  globalSocket = socket;
  doSomething();
});

function doSomething() {
  // do something with globalSocket
  console.log(globalSocket);
}

但是将socket作为参数传递给函数会更加优雅:

io.on('connection', function (socket) {
  doSomething(socket);
});

function doSomething(socket) {
  // do something with socket
  console.log(socket);
}