Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象引用传递到处理程序外部,即使其成为全局的_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 将对象引用传递到处理程序外部,即使其成为全局的

Javascript 将对象引用传递到处理程序外部,即使其成为全局的,javascript,node.js,socket.io,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!! 嗯,您必须将其存储在某种套接字连接池中。但是请记住,如果您想在

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

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

//do stuff here

});//end callback handler

//need a reference to socket here!!

嗯,您必须将其存储在某种套接字连接池中。但是请记住,如果您想在多个进程/机器中使用负载平衡器进行分发,这将无法很好地工作。

只需将其分配给在该范围内定义的变量即可

var globalSocket;

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

// now what?
但是,我看不出这样做的理由,因为在调用事件处理程序之前(只有在调用事件处理程序时才知道),您将无法使用该值

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

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

您打算如何调用需要
socket
?或假设我只有1个套接字连接的方法?var socket=io.socket;